Bug #35509 Federated leaks memory when connecting to localhost/default port

Submitted: 24 Mar 2008 7:18 Modified: 15 Apr 2008 1:38
Reporter: Sergey Vojtovich Email Updates:
Status: Closed Impact on me:
None 
Category:MySQL Server: Federated storage engine Severity:S3 (Non-critical)
Version:5.0.60-BK OS:Any
Assigned to: Sergey Vojtovich CPU Architecture:Any
Tags: memory leak

[24 Mar 2008 7:18] Sergey Vojtovich
Description:
When creating federated table, which points to localhost and port is not specified or 0 (=default), connect string parser makes a copy of socket path, which is not freed. The problem was discovered with a test case for BUG#34788. Affects 5.0 only.

How to repeat:
Run mysqld under valgrind.
create table t1(a int) engine=federated connection='mysql://root@localhost/test/t3';
create table t2(a int) engine=federated connection='mysql://root@localhost:0/test/t3';

Suggested fix:
Do not make a copy of socket path.
[24 Mar 2008 12:26] Valeriy Kravchuk
Thank you for a problem report. Sorry, but where is the problem:

openxs@suse:~/dbs/5.0> bin/mysql -uroot test
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.0.60-valgrind-max-debug Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> create table t1(a int) engine=federated connection='mysql://root@localhost/test/t3';
Query OK, 0 rows affected (0.01 sec)

mysql> create table t2(a int) engine=federated connection='mysql://root@localhost:0/test/t3';
Query OK, 0 rows affected (0.01 sec)

mysql> exit
Bye
openxs@suse:~/dbs/5.0> tail var/suse.err
080323 14:34:57  mysqld started
080323 14:34:58  InnoDB: Started; log sequence number 0 43655
080323 14:34:58 [Note] /home/openxs/dbs/5.0/libexec/mysqld: ready for connections.
Version: '5.0.60-valgrind-max-debug'  socket: '/tmp/mysql.sock'  port: 3306  Source distribution

Do I miss something?
[24 Mar 2008 14:32] Sergey Vojtovich
Hi Valeriy,

afaics (not sure) you didn't run mysqld under valgrind. It is easier to repeat using mysql-test-run script:
cd mysql-test; ./mysql-test-run --valgrind AAA
(where AAA is provided test case)

cat var/log/master.err
...
==17359== 88 bytes in 2 blocks are still reachable in loss record 4 of 6
==17359==    at 0x4005400: malloc (vg_replace_malloc.c:149)
==17359==    by 0x858664F: _mymalloc (safemalloc.c:137)
==17359==    by 0x8587753: _my_strdup (safemalloc.c:520)
==17359==    by 0x83E3F33: parse_url(st_federated_share*, st_table*, unsigned) (ha_federated.cc:659)
==17359==    by 0x83E407B: ha_federated::create(char const*, st_table*, st_ha_create_information*) (ha_federated.cc:2805)
==17359==    by 0x832021E: ha_create_table(char const*, st_ha_create_information*, bool) (handler.cc:2256)
==17359==    by 0x82FD0F4: rea_create_table(THD*, char*, char const*, char const*, st_ha_create_information*, List<create_field>&, unsigned, st_key*) (unireg.cc:298)
==17359==    by 0x836083F: mysql_create_table(THD*, char const*, char const*, st_ha_create_information*, Alter_info*, bool, unsigned) (sql_table.cc:1798)
==17359==    by 0x82427F6: mysql_execute_command(THD*) (sql_parse.cc:3177)
==17359==    by 0x82499FD: mysql_parse(THD*, char const*, unsigned, char const**) (sql_parse.cc:6173)
==17359==    by 0x824C247: dispatch_command(enum_server_command, THD*, char*, unsigned) (sql_parse.cc:1875)
==17359==    by 0x824D794: do_command(THD*) (sql_parse.cc:1581)
==17359==    by 0x824E96E: handle_one_connection (sql_parse.cc:1187)
==17359==    by 0xC4B3DA: start_thread (in /lib/libpthread-2.5.so)
==17359==    by 0xBA506D: clone (in /lib/libc-2.5.so)
...
[24 Mar 2008 16:50] Valeriy Kravchuk
Verified just as described in the last comment. I've got:

==22755== 32 bytes in 2 blocks are definitely lost in loss record 4 of 7
==22755==    at 0x401C4CE: malloc (vg_replace_malloc.c:149)
==22755==    by 0x84B9219: my_malloc (my_malloc.c:34)
==22755==    by 0x84B93F3: my_strdup (my_malloc.c:79)
==22755==    by 0x8364F5A: parse_url(st_federated_share*, st_table*, unsigned) (ha_federated.cc:652)
==22755==    by 0x8369FE0: ha_federated::create(char const*, st_table*, st_ha_create_information*) (ha_federated.cc:2782)
==22755==    by 0x82BD7FA: ha_create_table(char const*, st_ha_create_information*, bool) (handler.cc:2256)
==22755==    by 0x829C624: rea_create_table(THD*, char*, char const*, char const*, st_ha_create_information*, List<create_field>&, unsigned, st_key*) (unireg.cc:298)
==22755==    by 0x82F0962: mysql_create_table(THD*, char const*, char const*, st_ha_create_information*, Alter_info*, bool, unsigned) (sql_table.cc:1798)
==22755==    by 0x81FE6D6: mysql_execute_command(THD*) (sql_parse.cc:3175)
==22755==    by 0x8205CC8: mysql_parse(THD*, char const*, unsigned, char const**) (sql_parse.cc:6173)
==22755==    by 0x81FBAFA: dispatch_command(enum_server_command, THD*, char*, unsigned) (sql_parse.cc:1875)
==22755==    by 0x81FB18C: do_command(THD*) (sql_parse.cc:1581)
==22755==    by 0x81FA262: handle_one_connection (sql_parse.cc:1187)
==22755==    by 0x4057AA6: (within /lib/tls/libpthread.so.0)
==22755==    by 0x4188C2D: clone (in /lib/tls/libc.so.6)
[25 Mar 2008 8:53] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/44373

ChangeSet@1.2600, 2008-03-25 12:47:57+04:00, svoj@mysql.com +2 -0
  BUG#35509 - Federated leaks memory when connecting to
              localhost/default port
  
  When creating federated table that points to unspecified host or
  localhost on unspecified port or port is 0, small memory leak occurs.
  
  This happens because we make a copy of unix socket path, which is
  never freed.
  
  With this fix we do not make a copy of unix socket path, instead
  share->socket points to MYSQL_UNIX_ADDR constant directly.
  
  This fix is covered by a test case for BUG34788.
  
  Affects 5.0 only.
[25 Mar 2008 15:17] Ingo Strüwing
Approved. See comments in email.
[27 Mar 2008 11:17] Bugs System
Pushed into 5.1.24-rc
[27 Mar 2008 11:20] Bugs System
Pushed into 5.0.60
[27 Mar 2008 17:49] Bugs System
Pushed into 6.0.5-alpha
[15 Apr 2008 1:38] Paul DuBois
Noted in 5.0.60 changelog.

There was a memory leak when connecting to a FEDERATED table using a
connection string that had a host value of localhost or omitted the
host and a port value of 0 or omitted the port.

Portions of this website are copyright © 2001, 2002 The PHP Group

Page generated in 0.042 sec. using MySQL 8.4.7-u6-cloud

Timestamp references displayed by the system are UTC.
Content reproduced on this site is the property of the respective copyright holders.
It is not reviewed in advance by Oracle and does not necessarily represent the opinion of Oracle or any other party.