diff --git a/winsup/cygserver/ChangeLog b/winsup/cygserver/ChangeLog
index 0c60e3525..cfcf9de25 100644
--- a/winsup/cygserver/ChangeLog
+++ b/winsup/cygserver/ChangeLog
@@ -1,3 +1,10 @@
+2003-11-26  Corinna Vinschen  <corinna@vinschen.de>
+
+	* cygserver.cc (main): Move call to ipcinit() up before installing
+	any threads.
+	* sysv_sem.cc: Update to FreeBSD version 1.67.
+	(seminit): Initialize semaphore sequence numbers to 0.
+
 2003-11-26  Corinna Vinschen  <corinna@vinschen.de>
 
 	* Makefile.in (CYGWIN_LIB): Variable pointing to libcygwin.a in
diff --git a/winsup/cygserver/cygserver.cc b/winsup/cygserver/cygserver.cc
index 355060feb..0cc6244ad 100644
--- a/winsup/cygserver/cygserver.cc
+++ b/winsup/cygserver/cygserver.cc
@@ -726,6 +726,8 @@ main (const int argc, char *argv[])
   if (wincap.has_security () && !setup_privileges ())
     panic ("Setting process privileges failed.");
 
+  ipcinit ();
+
   /*XXXXX*/
   threaded_queue request_queue (request_threads);
 
@@ -739,11 +741,7 @@ main (const int argc, char *argv[])
   request_queue.add_submission_loop (&submission_loop);
 
   if (transport->listen () == -1)
-    {
-      exit (1);
-    }
-
-  ipcinit ();
+    return 1;
 
   cache.start ();
 
diff --git a/winsup/cygserver/sysv_sem.cc b/winsup/cygserver/sysv_sem.cc
index ac5efcdaa..ccb7a1246 100644
--- a/winsup/cygserver/sysv_sem.cc
+++ b/winsup/cygserver/sysv_sem.cc
@@ -17,7 +17,7 @@
 #ifndef __FBSDID
 #define __FBSDID(s)	const char version[] = (s)
 #endif
-__FBSDID("$FreeBSD: /usr/local/www/cvsroot/FreeBSD/src/sys/kern/sysv_sem.c,v 1.66 2003/11/10 07:22:41 tjr Exp $");
+__FBSDID("$FreeBSD: /usr/local/www/cvsroot/FreeBSD/src/sys/kern/sysv_sem.c,v 1.67 2003/11/15 11:56:53 tjr Exp $");
 
 #define _KERNEL 1
 #define __BSD_VISIBLE 1
@@ -228,6 +228,7 @@ seminit(void)
 	for (i = 0; i < seminfo.semmni; i++) {
 		sema[i].sem_base = 0;
 		sema[i].sem_perm.mode = 0;
+		sema[i].sem_perm.seq = 0;
 	}
 	for (i = 0; i < seminfo.semmni; i++)
 		mtx_init(&sema_mtx[i], "semid", NULL, MTX_DEF);