On 02.10.2008, Sascha Wilde wrote: > We discovered that this new code in dict-server.c seems to be the problem: > > server->fd = net_listen_unix_unlink_stale(path, 64); > if (server->fd == -1) { > if (errno == EADDRINUSE) > i_fatal("Socket already exists: %s", path); > else > i_fatal("net_listen_unix(%s) failed: %m", path); > }
It turns out the problem is that net_listen_unix_unlink_stale is called even if a file descriptor is passed into dict_server_init. The attached patch fixes it for me. Regards, Bernhard -- Bernhard Herzog | ++49-541-335 08 30 | 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
diff -r 1155c1f7fed8 src/dict/dict-server.c --- a/src/dict/dict-server.c Wed Oct 01 16:07:57 2008 +0300 +++ b/src/dict/dict-server.c Thu Oct 02 20:07:57 2008 +0200 @@ -526,12 +526,14 @@ struct dict_server *dict_server_init(con server->path = i_strdup(path); server->fd = fd; - server->fd = net_listen_unix_unlink_stale(path, 64); if (server->fd == -1) { - if (errno == EADDRINUSE) - i_fatal("Socket already exists: %s", path); - else - i_fatal("net_listen_unix(%s) failed: %m", path); + server->fd = net_listen_unix_unlink_stale(path, 64); + if (server->fd == -1) { + if (errno == EADDRINUSE) + i_fatal("Socket already exists: %s", path); + else + i_fatal("net_listen_unix(%s) failed: %m", path); + } } server->io = io_add(server->fd, IO_READ,
signature.asc
Description: This is a digitally signed message part.