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,

Attachment: signature.asc
Description: This is a digitally signed message part.

Reply via email to