update eio. add EIO_STACKSIZE define for getaddrinfo problem
authorRyan <ry@tinyclouds.org>
Wed, 22 Apr 2009 15:19:08 +0000 (17:19 +0200)
committerRyan <ry@tinyclouds.org>
Wed, 22 Apr 2009 15:19:08 +0000 (17:19 +0200)
deps/libeio/Changes
deps/libeio/eio.c
deps/libeio/eio.pod
deps/libeio/xthread.h
wscript

index d98deef..d4c3a12 100644 (file)
@@ -3,6 +3,7 @@ Revision history for libeio
 TODO: maybe add mincore support? available on at leats darwin, solaris, linux, freebsd
 
 1.0
+       - added EIO_STACKSIZE.
        - added msync, mtouch support (untested).
         - added sync_file_range (untested).
         - fixed custom support.
index e0e172f..b26008b 100644 (file)
  */
 
 #include "eio.h"
+
+#ifdef EIO_STACKSIZE
+# define XTHREAD_STACKSIZE EIO_STACKSIZE
+#endif
 #include "xthread.h"
 
 #include <errno.h>
index bbacb66..d16b3a9 100644 (file)
@@ -245,6 +245,27 @@ If you need to know how, check the C<IO::AIO> perl module, which does
 exactly that.
 
 
+=head1 COMPILETIME CONFIGURATION
+
+These symbols, if used, must be defined when compiling F<eio.c>.
+
+=over 4
+
+=item EIO_STACKSIZE
+
+This symbol governs the stack size for each eio thread. Libeio itself
+was written to use very little stackspace, but when using C<EIO_CUSTOM>
+requests, you might want to increase this.
+
+If this symbol is undefined (the default) then libeio will use its default
+stack size (C<sizeof (long) * 4096> currently).  If it is defined, but
+C<0>, then the default operating system stack size will be used. In all
+other cases, the value must be an expression that evaluates to the desired
+stack size.
+
+=back
+
+
 =head1 PORTABILITY REQUIREMENTS
 
 In addition to a working ISO-C implementation, libeio relies on a few
index 63ff20c..88881e8 100644 (file)
@@ -118,6 +118,10 @@ typedef pthread_t thread_t;
 # define PTHREAD_STACK_MIN 0
 #endif
 
+#ifndef XTHREAD_STACKSIZE
+# define XTHREAD_STACKSIZE sizeof (long) * 4096
+#endif
+
 static int
 thread_create (thread_t *tid, void *(*proc)(void *), void *arg)
 {
@@ -127,8 +131,11 @@ thread_create (thread_t *tid, void *(*proc)(void *), void *arg)
 
   pthread_attr_init (&attr);
   pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED);
-  pthread_attr_setstacksize (&attr, PTHREAD_STACK_MIN < sizeof (long) * 4096 * 4
-                                    ? sizeof (long) * 4096 * 4 : PTHREAD_STACK_MIN);
+
+  if (XTHREAD_STACKSIZE > 0)
+    pthread_attr_setstacksize (&attr, PTHREAD_STACK_MIN > (XTHREAD_STACKSIZE)
+                                      ? PTHREAD_STACK_MIN : (XTHREAD_STACKSIZE));
+
 #ifdef PTHREAD_SCOPE_PROCESS
   pthread_attr_setscope (&attr, PTHREAD_SCOPE_PROCESS);
 #endif
diff --git a/wscript b/wscript
index 15e55b7..fee5bd6 100644 (file)
--- a/wscript
+++ b/wscript
@@ -49,6 +49,7 @@ def configure(conf):
     conf.define("HAVE_GNUTLS", 1)
 
   conf.define("HAVE_CONFIG_H", 1)
+  conf.env.append_value("CCFLAGS", "-DEIO_STACKSIZE=%d" % (4096*8))
 
   # Split off debug variant before adding variant specific defines
   debug_env = conf.env.copy()
@@ -63,8 +64,8 @@ def configure(conf):
 
   # Configure default variant
   conf.setenv('default')
-  conf.env.append_value('CCFLAGS', ['-DNDEBUG', '-O0', '-g'])
-  conf.env.append_value('CXXFLAGS', ['-DNDEBUG', '-O0', '-g'])
+  conf.env.append_value('CCFLAGS', ['-DDEBUG', '-O0', '-g'])
+  conf.env.append_value('CXXFLAGS', ['-DDEBUG', '-O0', '-g'])
   conf.write_config_header("config.h")
 
 def build(bld):
@@ -77,18 +78,18 @@ def build(bld):
   deps_tgt = join(bld.srcnode.abspath(bld.env),"deps")
   v8dir_src = join(deps_src,"v8")
   v8dir_tgt = join(deps_tgt, "v8")
-  #v8lib = bld.env["staticlib_PATTERN"] % "v8_g"
-  v8lib = bld.env["staticlib_PATTERN"] % "v8"
+  v8lib = bld.env["staticlib_PATTERN"] % "v8_g"
+  #v8lib = bld.env["staticlib_PATTERN"] % "v8"
   v8 = bld.new_task_gen(
     target=join("deps/v8",v8lib),
-    #rule='cp -rf %s %s && cd %s && scons -Q mode=debug library=static snapshot=on' 
-    rule='cp -rf %s %s && cd %s && scons -Q library=static snapshot=on' 
+    rule='cp -rf %s %s && cd %s && scons -Q mode=debug library=static snapshot=on' 
+    #rule='cp -rf %s %s && cd %s && scons -Q library=static snapshot=on' 
       % ( v8dir_src , deps_tgt , v8dir_tgt),
     before="cxx"
   )
   bld.env["CPPPATH_V8"] = "deps/v8/include"
-  bld.env["STATICLIB_V8"] = "v8"
-  #bld.env["STATICLIB_V8"] = "v8_g"
+  #bld.env["STATICLIB_V8"] = "v8"
+  bld.env["STATICLIB_V8"] = "v8_g"
   bld.env["LIBPATH_V8"] = v8dir_tgt
   bld.env["LINKFLAGS_V8"] = "-pthread"