summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Changes1
-rw-r--r--eio.c4
-rw-r--r--eio.pod21
-rw-r--r--xthread.h11
4 files changed, 35 insertions, 2 deletions
diff --git a/Changes b/Changes
index d98deef..d4c3a12 100644
--- a/Changes
+++ b/Changes
@@ -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.
diff --git a/eio.c b/eio.c
index e0e172f..b26008b 100644
--- a/eio.c
+++ b/eio.c
@@ -38,6 +38,10 @@
*/
#include "eio.h"
+
+#ifdef EIO_STACKSIZE
+# define XTHREAD_STACKSIZE EIO_STACKSIZE
+#endif
#include "xthread.h"
#include <errno.h>
diff --git a/eio.pod b/eio.pod
index bbacb66..d16b3a9 100644
--- a/eio.pod
+++ b/eio.pod
@@ -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
diff --git a/xthread.h b/xthread.h
index e53cb53..88881e8 100644
--- a/xthread.h
+++ b/xthread.h
@@ -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
- ? sizeof (long) * 4096 : 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