Apparently SuSE 9.1's X distribution uses even bigger buffers than the standard ones. 64kB appears to be enough for a stack in that case, but let's just go nuts and make the stacks enormous, so that it takes a few more doublings of X's stack needs before we run into this problem again. The VM system should take care of not actually using most of the memory anyway.
diff --git a/src/libdraw/x11-itrans.c b/src/libdraw/x11-itrans.c index f1c72ee..8b1c137 100644 --- a/src/libdraw/x11-itrans.c +++ b/src/libdraw/x11-itrans.c
@@ -21,7 +21,8 @@ if(e->xany.type != KeyPress) return -1; - needstack(20*1024); /* X has some *huge* buffers in openobject */ + needstack(64*1024); /* X has some *huge* buffers in openobject */ + /* and they're even bigger on SuSE */ XLookupString((XKeyEvent*)e,NULL,0,&k,NULL); if(k == XK_Multi_key || k == NoSymbol) return -1;
diff --git a/src/libdraw/x11-keyboard.c b/src/libdraw/x11-keyboard.c index 1a4d0a3..77fa78b 100644 --- a/src/libdraw/x11-keyboard.c +++ b/src/libdraw/x11-keyboard.c
@@ -72,7 +72,7 @@ return nil; kc->c = chancreate(sizeof(Rune), 20); chansetname(kc->c, "kbdc"); - proccreate(_ioproc, kc, 32768); + proccreate(_ioproc, kc, 256*1024); return kc; }
diff --git a/src/libdraw/x11-mouse.c b/src/libdraw/x11-mouse.c index 936b562..1e77575 100644 --- a/src/libdraw/x11-mouse.c +++ b/src/libdraw/x11-mouse.c
@@ -141,7 +141,7 @@ chansetname(mc->c, "mousec"); mc->resizec = chancreate(sizeof(int), 2); chansetname(mc->resizec, "resizec"); - proccreate(_ioproc, mc, 32768); + proccreate(_ioproc, mc, 256*1024); return mc; }
diff --git a/src/libthread/thread.c b/src/libthread/thread.c index ff22bba..646d265 100644 --- a/src/libthread/thread.c +++ b/src/libthread/thread.c
@@ -578,7 +578,7 @@ p = procalloc(); _threadsetproc(p); if(mainstacksize == 0) - mainstacksize = 65536; + mainstacksize = 256*1024; _threadcreate(p, threadmainstart, nil, mainstacksize); scheduler(p); _threaddaemonize();