A
lgorithmique
N
umérique
D
istribuée
Public GIT Repository
projects
/
simgrid.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'master' of git+ssh://scm.gforge.inria.fr//gitroot/simgrid/simgrid
[simgrid.git]
/
src
/
xbt
/
xbt_os_thread.c
diff --git
a/src/xbt/xbt_os_thread.c
b/src/xbt/xbt_os_thread.c
index
e18ae2e
..
2e9e91f
100644
(file)
--- a/
src/xbt/xbt_os_thread.c
+++ b/
src/xbt/xbt_os_thread.c
@@
-53,6
+53,11
@@
static xbt_os_thread_t main_thread = NULL;
static pthread_key_t xbt_self_thread_key;
static int thread_mod_inited = 0;
static pthread_key_t xbt_self_thread_key;
static int thread_mod_inited = 0;
+/* attribute structure to handle pthread stack size changing */
+//FIXME: find where to put this
+static pthread_attr_t attr;
+static int thread_attr_inited = 0;
+
/* frees the xbt_os_thread_t corresponding to the current thread */
static void xbt_os_thread_free_thread_data(xbt_os_thread_t thread)
{
/* frees the xbt_os_thread_t corresponding to the current thread */
static void xbt_os_thread_free_thread_data(xbt_os_thread_t thread)
{
@@
-133,6
+138,7
@@
void xbt_os_thread_mod_postexit(void)
__xbt_ex_terminate = &__xbt_ex_terminate_default;
}
__xbt_ex_terminate = &__xbt_ex_terminate_default;
}
+/* this function is critical to tesh+mmalloc, don't mess with it */
int xbt_os_thread_atfork(void (*prepare)(void),
void (*parent)(void), void (*child)(void))
{
int xbt_os_thread_atfork(void (*prepare)(void),
void (*parent)(void), void (*child)(void))
{
@@
-158,6
+164,7
@@
static void *wrapper_start_routine(void *s)
return res;
}
return res;
}
+
xbt_os_thread_t xbt_os_thread_create(const char *name,
pvoid_f_pvoid_t start_routine,
void *param,
xbt_os_thread_t xbt_os_thread_create(const char *name,
pvoid_f_pvoid_t start_routine,
void *param,
@@
-174,14
+181,24
@@
xbt_os_thread_t xbt_os_thread_create(const char *name,
XBT_RUNNING_CTX_INITIALIZE(res_thread->running_ctx);
res_thread->extra_data = extra_data;
XBT_RUNNING_CTX_INITIALIZE(res_thread->running_ctx);
res_thread->extra_data = extra_data;
- if ((errcode = pthread_create(&(res_thread->t), NULL,
+ if ((errcode = pthread_create(&(res_thread->t),
thread_attr_inited!=0? &attr:
NULL,
wrapper_start_routine, res_thread)))
THROWF(system_error, errcode,
"pthread_create failed: %s", strerror(errcode));
wrapper_start_routine, res_thread)))
THROWF(system_error, errcode,
"pthread_create failed: %s", strerror(errcode));
+
+
return res_thread;
}
return res_thread;
}
+
+void xbt_os_thread_setstacksize(int stack_size)
+{
+ pthread_attr_init(&attr);
+ pthread_attr_setstacksize (&attr, stack_size);
+ thread_attr_inited=1;
+}
+
const char *xbt_os_thread_name(xbt_os_thread_t t)
{
return t->name;
const char *xbt_os_thread_name(xbt_os_thread_t t)
{
return t->name;
@@
-642,7
+659,7
@@
typedef struct xbt_os_thread_ {
/* the default size of the stack of the threads (in bytes)*/
#define XBT_DEFAULT_THREAD_STACK_SIZE 4096
/* the default size of the stack of the threads (in bytes)*/
#define XBT_DEFAULT_THREAD_STACK_SIZE 4096
-
+static int stack_size=0;
/* key to the TLS containing the xbt_os_thread_t structure */
static unsigned long xbt_self_thread_key;
/* key to the TLS containing the xbt_os_thread_t structure */
static unsigned long xbt_self_thread_key;
@@
-693,7
+710,7
@@
xbt_os_thread_t xbt_os_thread_create(const char *name,
t->start_routine = start_routine;
t->param = param;
t->extra_data = extra_data;
t->start_routine = start_routine;
t->param = param;
t->extra_data = extra_data;
- t->handle = CreateThread(NULL,
XBT_DEFAULT_THREAD_STACK_SIZE
,
+ t->handle = CreateThread(NULL,
stack_size==0 ? XBT_DEFAULT_THREAD_STACK_SIZE : stack_size
,
(LPTHREAD_START_ROUTINE) wrapper_start_routine,
t, STACK_SIZE_PARAM_IS_A_RESERVATION, &(t->id));
(LPTHREAD_START_ROUTINE) wrapper_start_routine,
t, STACK_SIZE_PARAM_IS_A_RESERVATION, &(t->id));
@@
-705,6
+722,11
@@
xbt_os_thread_t xbt_os_thread_create(const char *name,
return t;
}
return t;
}
+void xbt_os_thread_setstacksize(int stack_size)
+{
+ stack_size=stack_size;
+}
+
const char *xbt_os_thread_name(xbt_os_thread_t t)
{
return t->name;
const char *xbt_os_thread_name(xbt_os_thread_t t)
{
return t->name;