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.
