Bug #53251 mysql_library_init fails on second execution with embedded library

Submitted: 28 Apr 2010 13:11 Modified: 20 Oct 2010 2:16
Reporter: Harrison Fisk Email Updates:
Status: Closed Impact on me:
None 
Category:MySQL Server: Embedded Library ( libmysqld ) Severity:S2 (Serious)
Version:5.5.4 OS:Linux (x86_64)
Assigned to: Alexey Botchkov CPU Architecture:Any
Tags: embedded, mysql_library_init, regression

[28 Apr 2010 13:11] Harrison Fisk
Description:
If you are using the embedded library and call mysql_library_init to launch the embedded server for the second time (after stopping it previously with mysql_library_end), then it will cause a segmentation fault while reading the configuration files.

I will attach a test case to the issue, and it works fine with MySQL 5.1.90.

The backtrace looks like:

(gdb) bt
#0  my_stat (path=0x7fff06294ee0 "/etc/mysql/my.cnf", stat_area=0x7fff062952f0, my_flags=0) at my_lib.c:548
#1  0x00000000005439b3 in search_default_file_with_ext (opt_handler=0x543750 <handle_default_option>, handler_ctx=0x7fff062954e0, dir=0x2fbee30 "/etc/mysql/", 
    ext=0x94d2b5 ".cnf", config_file=0x948188 "my", recursion_level=0) at default.c:714
#2  0x000000000054474c in my_search_option_files (conf_file=0x948188 "my", argc=<value optimized out>, argv=<value optimized out>, args_used=0x7fff0629551c, 
    func=0x543750 <handle_default_option>, func_ctx=0x7fff062954e0, default_directories=0x2fbedf0) at default.c:597
#3  0x0000000000544a3d in my_load_defaults (conf_file=0x948188 "my", groups=0x7fff06295648, argc=0x7fff0629556c, argv=0x7fff06295560, default_directories=0xf65b00)
    at default.c:506
#4  0x0000000000569a26 in init_embedded_server (argc=6, argv=0x7fff06295600, groups=0x7fff06295630) at lib_sql.cc:507
#5  0x0000000000502581 in main ()

How to repeat:
Compile the test case against 5.5.4.  Run the test case.  See segfault.

Compile the test case against 5.1. Run the test case.  See it works fine.

Suggested fix:
Don't segfault.
[28 Apr 2010 13:11] Harrison Fisk
test case

Attachment: main.cpp (text/plain), 1.75 KiB.

[28 Apr 2010 13:12] Harrison Fisk
Makefile for test case, run 'make', or 'make 50',

Attachment: Makefile (application/octet-stream, text), 815 bytes.

[1 Jul 2010 13:45] 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/112671

3258 Alexey Botchkov	2010-06-30
      Bug#53251      mysql_library_init fails on second execution with embedded library
         we need to clear error messages when closing server.
      
      per-file comments:
        libmysqld/embedded_priv.h
      Bug#53251      mysql_library_init fails on second execution with embedded library
        libmysqld/lib_sql.cc
      Bug#53251      mysql_library_init fails on second execution with embedded library
[7 Jul 2010 14:36] 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/113037

3288 Alexey Botchkov	2010-07-06
      Bug#53251      mysql_library_init fails on second execution with embedded library
          thread-specific variables weren't set when we load error message files.
      
      per-file comments:
        libmysqld/lib_sql.cc
      Bug#53251      mysql_library_init fails on second execution with embedded library
            we need to call my_thread_init() once more. Normally it's called at the my_init()
            stage but that doesn't happen on the second my_init() call.
      
        sql/derror.cc
      Bug#53251      mysql_library_init fails on second execution with embedded library
           use default errors for the embedded server.
[8 Jul 2010 14:12] Alexey Botchkov
Don't mind the first patch please.
Was rather an experimental one.
[30 Aug 2010 17:20] 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/117153

3195 Alexey Botchkov	2010-08-30
       Bug#53251      mysql_library_init fails on second execution with embedded library
                thread-specific variables weren't set when we load error message files.
            
      per-file comments:
        libmysqld/lib_sql.cc
      Bug#53251      mysql_library_init fails on second execution with embedded library
            we need to call my_thread_init() once more. Normally it's called at the my_init()
            stage but that doesn't happen on the second my_init() call.
      
        sql/derror.cc
      Bug#53251      mysql_library_init fails on second execution with embedded library
           use default errors for the embedded server.
      
        sql/mysqld.cc
      Bug#53251      mysql_library_init fails on second execution with embedded library
              unregister server errors in clean_up(). Without it the error list contains
              that on the second mysql_server_init() which is not good.
[2 Sep 2010 19:43] 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/117451

3202 Alexey Botchkov	2010-09-02
      Bug#53251      mysql_library_init fails on second execution with embedded library
                thread-specific variables weren't set when we load error message files.
      
      per-file comments:
        libmysqld/lib_sql.cc
      Bug#53251      mysql_library_init fails on second execution with embedded library
            we need to call my_thread_init() once more. Normally it's called at the my_init()
            stage but that doesn't happen on the second my_init() call.
      
        sql/derror.cc
      Bug#53251      mysql_library_init fails on second execution with embedded library
           use default errors for the embedded server.
      
        sql/mysqld.cc
      Bug#53251      mysql_library_init fails on second execution with embedded library
              unregister server errors in clean_up(). Without it the error list contains
              that on the second mysql_server_init() which is not good.
      
        sql/set_var.cc
      Bug#53251      mysql_library_init fails on second execution with embedded library
              sys_var::cleanup() call instead of the destructor
      
        sql/set_var.h
      Bug#53251      mysql_library_init fails on second execution with embedded library
              sys_var::cleanup() introduced instead of the destructor
              
        sql/sys_vars.h
      Bug#53251      mysql_library_init fails on second execution with embedded library
              Sys_var_charptr::cleanup() implemented
[3 Sep 2010 10:06] Alexander Barkov
Ok to push:

http://bugs.mysql.com/bug.php?id=53251
[3 Sep 2010 10:39] Alexander Barkov
Ok to push:
http://lists.mysql.com/commits/117451
[9 Sep 2010 7:54] Alexey Botchkov
mysql-5.5-bugfixing
[9 Sep 2010 12:37] 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/117859

3206 Davi Arnaut	2010-09-09
      Bug#53251: mysql_library_init fails on second execution with embedded library
      
      Add a virtual destructor. Class has virtual functions.
[2 Oct 2010 18:13] Bugs System
Pushed into mysql-trunk 5.6.1-m4 (revid:alexander.nozdrin@oracle.com-20101002180948-852x1cuv7c6i85ea) (version source revid:alexander.nozdrin@oracle.com-20101002180857-an32jpuwzemsp4f2) (merge vers: 5.6.1-m4) (pib:21)
[2 Oct 2010 18:15] Bugs System
Pushed into mysql-next-mr (revid:alexander.nozdrin@oracle.com-20101002181053-6iotvl26uurcoryp) (version source revid:alexander.nozdrin@oracle.com-20101002180917-h0n62akupm3z20nt) (pib:21)
[2 Oct 2010 18:16] Bugs System
Pushed into mysql-5.5 5.5.7-rc (revid:alexander.nozdrin@oracle.com-20101002180831-590ka2tuit9qoxbb) (version source revid:alexander.nozdrin@oracle.com-20101002180831-590ka2tuit9qoxbb) (merge vers: 5.5.7-rc) (pib:21)
[20 Oct 2010 2:16] Paul DuBois
Noted in 5.5.7, 5.6.1 changelogs.

If an application using the embedded server called
mysql_library_init() a second time after calling mysql_library_init()
and mysql_library_end() to start and stop the server, the application
crashed when reading option files.

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

Page generated in 0.090 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.