On 20.05.2010 19:52, wrote Timo Sirainen: > On 5.5.2010, at 20.34, Michael Kliewe wrote: > >> -- dovecot-2.0.beta4-25/src/lib-sql/driver-mysql.c 2010-04-02 >> 16:47:13.000000000 +0400 >> +++ dovecot-2.0.beta4/src/lib-sql/driver-mysql.c 2010-05-01 >> 03:29:02.000000000 +0400 >> @@ -630,7 +631,9 @@ >> struct mysql_result *my_result = (struct mysql_result *)result; >> >> rows = mysql_affected_rows(my_result->conn->mysql); >> - i_assert(rows != (my_ulonglong)-1); >> + if (mysql_errno(my_result->conn->mysql)) >> + i_assert(rows != (my_ulonglong)-1); >> + else rows = 0; >> *ctx->head->affected_rows = rows; >> } >> sql_result_unref(result); > > The above patch works, but it doesn't really fix the cause of the bug. This > should fix it in a cleaner way: > http://hg.dovecot.org/dovecot-2.0/rev/1e45b463b93a
Hhm, this doesn't seem to fix it for me. Just tested with the latest hg version (f7527971fed0) and hitting the assertion again. Unfortunately I don't manage to get a "real" core dump from the dictionary process, just the backtrace attached.
May 25 19:51:20 ubuntu-test dovecot: master: Dovecot v2.0.beta5 (f7527971fed0) starting up ... May 25 19:53:34 ubuntu-test dovecot: master: Error: service(dict): child 9755 killed with signal 6 (core not dumped) May 25 19:53:34 ubuntu-test dovecot: dict: Panic: file driver-mysql.c: line 482 (transaction_send_query): assertion failed: (rows != (my_ulonglong)-1) May 25 19:53:34 ubuntu-test dovecot: dict: Error: Raw backtrace: /usr/lib/dovecot/libdovecot.so.0(+0x33dd1) [0xb77a2dd1] -> /usr/lib/dovecot/libdovecot.so.0(+0x33e3f) [0xb77a2e3f] -> /usr/ lib/dovecot/libdovecot.so.0(i_error+0) [0xb777d70e] -> dovecot/dict() [0x805219a] -> dovecot/dict() [0x805220f] -> dovecot/dict(sql_transaction_commit_s+0x20) [0x804f9e0] -> dovecot/dict() [0x805144e] -> dovecot/dict(sql_transaction_commit_s+0x20) [0x804f9e0] -> dovecot/dict() [0x804e982] -> /usr/lib/dovecot/libdovecot.so.0(dict_transaction_commit_async+0x2f) [0xb778285f] - > dovecot/dict() [0x804cc40] -> dovecot/dict() [0x804c6ad] -> > /usr/lib/dovecot/libdovecot.so.0(io_loop_handler_run+0xe2) [0xb77af3a2] -> > /usr/lib/dovecot/libdovecot.so.0(io_loop_run+0x30) [0xb77ae3f0] -> /usr/lib/dovecot/libdovecot.so.0(master_service_run+0x2a) [0xb779bb5a] -> dovecot/dict(main+0x19c) [0x804d30c] -> /lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe6) [0xb7 379bd6] -> dovecot/dict() [0x804c391] May 25 19:53:34 ubuntu-test dovecot: lmtp(9754): Error: read(/var/run/dovecot/dict) failed: Remote disconnected May 25 19:53:34 ubuntu-test dovecot: lmtp(9754): Disconnect from local: Client quit ...