kqueue(2) is currently broken when used with /dev/null and a few other
authornicm <nicm@openbsd.org>
Sat, 24 Jul 2010 19:25:31 +0000 (19:25 +0000)
committernicm <nicm@openbsd.org>
Sat, 24 Jul 2010 19:25:31 +0000 (19:25 +0000)
devices.

An upcoming fix for some problems with the client stdout/stderr handling
relies on it working, so make tmux force libevent to use poll(2) via
EVENT_NOKQUEUE, until we have fixed kqueue.

usr.bin/tmux/server.c
usr.bin/tmux/tmux.c

index 88d73d7..4d52b88 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: server.c,v 1.89 2010/06/21 00:18:57 nicm Exp $ */
+/* $OpenBSD: server.c,v 1.90 2010/07/24 19:25:32 nicm Exp $ */
 
 /*
  * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -139,8 +139,11 @@ server_start(char *path)
                fatal("daemon failed");
 
        /* event_init() was called in our parent, need to reinit. */
+       if (setenv("EVENT_NOKQUEUE", "1", 1) != 0)
+               fatal("setenv");
        if (event_reinit(ev_base) != 0)
                fatal("event_reinit failed");
+       unsetenv("EVENT_NOKQUEUE");
        clear_signals();
 
        logfile("server");
index 644412d..d34b031 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: tmux.c,v 1.84 2010/07/11 17:06:45 nicm Exp $ */
+/* $OpenBSD: tmux.c,v 1.85 2010/07/24 19:25:31 nicm Exp $ */
 
 /*
  * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -532,7 +532,10 @@ main(int argc, char **argv)
                exit(1);
        }
 
+       if (setenv("EVENT_NOKQUEUE", "1", 1) != 0)
+               fatal("setenv");
        ev_base = event_init();
+       unsetenv("EVENT_NOKQUEUE");
        set_signals(main_signal);
 
        /* Initialise the client socket/start the server. */