Hi Timo, Hi list, I finally got along to test the current dovecot 1.2 with our Kolab Server. And I'm very excited to see all the cool ACL and shared name spaces stuff upstream, thanks a lot Timo!
Anyway I just stumbled across a new bug using our metadata-plugin (which in turn uses the dict back end): Making a few annotations requests after another it stops working. dovecot.log sais something like: Feb 03 11:58:21 burlywood3 <info> dovecot[10486]: IMAP(4...@burlywood3.rgb): metadata_get_metadata_entry: dict key=shared//kolab/var/dovecot/spool/4...@burlywood3. rgb/home/maildir/.Calendar//vendor/kolab/folder-type Feb 03 11:58:21 burlywood3 <error> dovecot[10486]: child 10503 (dict) killed with signal 11 Feb 03 11:58:21 burlywood3 <error> dovecot[10486]: IMAP(4...@burlywood3.rgb): read(/kolab/var/dovecot/run/dict-server) failed: Connection reset by peer Feb 03 11:58:21 burlywood3 <critical> dovecot[10520]: Fatal: dup2(3) failed: Bad file descriptor Feb 03 11:58:21 burlywood3 <error> dovecot[10486]: child 10520 (dict) returned error 89 (Fatal failure) Feb 03 11:58:21 burlywood3 <critical> dovecot[10486]: Panic: file ioloop.c: line 38 (io_add): assertion failed: (fd >= 0) (END) I attached gdb to dict and got this: Program received signal SIGSEGV, Segmentation fault. array_idx_modifiable_i (array=0x38, idx=0) at array.c:10 10 pos = idx * array->element_size; (gdb) bt #0 array_idx_modifiable_i (array=0x38, idx=0) at array.c:10 #1 0x0805e9a2 in sql_pool_unlink (ctx=0x80fb670) at sql-pool.c:64 #2 0x0805ea24 in sql_pool_new (pool=0x80f9470, db_driver=0x80dd498 "sqlite", connect_string=0x810ad78 "/kolab/var/dovecot/lib/metadata-dict.sqlite") at sql-pool.c:97 #3 0x0805bb3c in sql_dict_init (driver=0x80f9ae0, uri=0xbfce9f76 "/kolab/etc/dovecot/metadata-dict.conf", value_type=DICT_DATA_TYPE_STRING, username=0x80fb910 "4...@burlywood3.rgb") at dict-sql.c:86 #4 0x0805c9ca in dict_init (uri=0xbfce9f6f "sqlite:/kolab/etc/dovecot/metadata-dict.conf", value_type=DICT_DATA_TYPE_STRING, username=0x80fb910 "4...@burlywood3.rgb") at dict.c:87 #5 0x0805a1b1 in dict_client_connection_input (conn=0x80fb8d0) at dict-server.c:407 #6 0x0806637c in io_loop_handler_run (ioloop=0x80f8a80) at ioloop-epoll.c:202 #7 0x080652fd in io_loop_run (ioloop=0x80f8a80) at ioloop.c:338 #8 0x0805a42d in main () at main.c:122 (gdb) li 5 6 void *array_idx_modifiable_i(struct array *array, unsigned int idx) 7 { 8 size_t pos; 9 10 pos = idx * array->element_size; 11 if (pos >= array->buffer->used) { 12 /* index doesn't exist yet, initialize with zero */ 13 buffer_append_zero(array->buffer, pos + array->element_size - 14 array->buffer->used); (gdb) p array $1 = (struct array *) 0x38 (gdb) p *array Cannot access memory at address 0x38 (gdb) up #1 0x0805e9a2 in sql_pool_unlink (ctx=0x80fb670) at sql-pool.c:64 64 next_ctx = SQL_POOL_CONTEXT(ctx->prev); (gdb) p *ctx $2 = {module_ctx = {reg = 0x0}, prev = 0x0, next = 0x810d2b0, pool = 0x80f9470, refcount = 0, key = 0x80fb638 "sqlite\t/kolab/var/dovecot/lib/metadata-dict.sqlite", orig_deinit = 0x805f229 <driver_sqlite_deinit_v>} (gdb) li 59 prev_ctx->next = ctx->next; 60 } 61 if (ctx->next == NULL) 62 ctx->pool->unused_head = ctx->prev; 63 else { 64 next_ctx = SQL_POOL_CONTEXT(ctx->prev); 65 next_ctx->prev = ctx->prev; 66 } 67 ctx->pool->unused_count--; 68 } (gdb) c Continuing. Program terminated with signal SIGSEGV, Segmentation fault. The program no longer exists It's quite possible, that we got any details in the usage of the dict back end wrong, but I guess that in any case the dict server shouldn't segfault... cheers sascha -- Sascha Wilde OpenPGP key: 4BB86568 http://www.intevation.de/~wilde/ http://www.intevation.de/ Intevation GmbH, Neuer Graben 17, 49074 Osnabrück; AG Osnabrück, HR B 18998 Geschäftsführer: Frank Koormann, Bernhard Reiter, Dr. Jan-Oliver Wagner
pgpUfAMhvNrLd.pgp
Description: PGP signature