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();