2011-12-21 4 views
0

永続的なMySQL接続バージョン5.1.46を維持するCプログラムがあります。プログラムは、私のような二重の無料または破損エラーを取得する実行している間、私は、MySQLを再起動した場合:MySQLの再起動により、MySQL C APIを使用したフリーまたは破損が発生する

# /etc/init.d/mysql restart 
Shutting down MySQL........ [ OK ] 
Starting MySQL.*** glibc detected *** /home/user/a.out: double free or corruption (!prev): 0x000000000b64dd00 *** 
======= Backtrace: ========= 
/lib64/libc.so.6[0x3739471634] 

私はMYSQL_OPT_RECONNECTオプションを設定しており、明示的にまだこの接続を閉じていないため、自動的に再接続するための接続を期待しています。さらに、私が実行しているクエリは、誤ってNULLに設定したか、または割り当てを解除したchar *ではなく、定数の二重引用符で囲まれた文字列です。ここで

は、GDBでの結果のコアファイルから数行

#11 0x000000000044ed71 in mysql_send_query (mysql=0x41966aa0, query=0x41966100 "SELECT count (*) from TableA", length=27) at client.c:2894 
#12 0x000000000044edd9 in mysql_real_query (mysql=0x602a, query=0x602d <Address 0x602d out of bounds>, length=6) at client.c:2905 
#13 0x000000000042b42f in do_query (conn=0x41966aa0, msg=0x41966100 "SELECT count(*) from TableA") at dosql.cpp:20 

これが発生する理由を任意のアイデアですか?

+0

サーバ側で実行しているMySQLのバージョンと、クライアントでどのバージョンのC APIを使用していますか? – ObscureRobot

+0

私が取り組んでいるシステムはMySQLサーバ5.1.46を持っていて、私はC APIを含む5.1.46 MySQL-develパッケージを使用しています。 –

答えて

0

これが発生する理由を任意のアイデア?そのためのMySQLのバグの

最新のパッケージに更新し、問題が解決しないかどうかを確認することができます。

また、Valgrindの下のクライアントプログラムを実行し、それを固定するために使用可能な方法でバグを報告します。特に、メモリは、それが二重解放が起こっている

  • スタックトレースを解放された
  • スタックトレースを割り当てられた

    • スタックトレースを報告します(あなたのGDBスタックトレースと同じである必要があります)

    この情報が与えられれば、バグをMySQL開発者に報告することができ、最終的に修正されることを期待します。

  • 関連する問題