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
Give back control to maestro as late as possible.
[simgrid.git]
/
src
/
kernel
/
context
/
ContextThread.cpp
diff --git
a/src/kernel/context/ContextThread.cpp
b/src/kernel/context/ContextThread.cpp
index
3e28c30
..
012fbcc
100644
(file)
--- a/
src/kernel/context/ContextThread.cpp
+++ b/
src/kernel/context/ContextThread.cpp
@@
-1,5
+1,4
@@
-/* Copyright (c) 2009-2015. The SimGrid Team.
- * All rights reserved. */
+/* Copyright (c) 2009-2017. The SimGrid Team. All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
* under the terms of the license (GNU LGPL) which comes with this package. */
/* This program is free software; you can redistribute it and/or modify it
* under the terms of the license (GNU LGPL) which comes with this package. */
@@
-115,7
+114,7
@@
ThreadContext::ThreadContext(std::function<void()> code,
* name, but now the name is stored at SIMIX level, so we pass a null */
this->thread_ =
xbt_os_thread_create(nullptr,
* name, but now the name is stored at SIMIX level, so we pass a null */
this->thread_ =
xbt_os_thread_create(nullptr,
- maestro ?
ThreadContext::maestro_wrapper :
ThreadContext::wrapper,
+ maestro ?
&ThreadContext::maestro_wrapper : &
ThreadContext::wrapper,
this, this);
/* wait the starting of the newly created process */
xbt_os_sem_acquire(this->end_);
this, this);
/* wait the starting of the newly created process */
xbt_os_sem_acquire(this->end_);
@@
-201,9
+200,9
@@
void ThreadContext::stop()
xbt_os_sem_release(smx_ctx_thread_sem);
// Signal to the maestro that it has finished:
xbt_os_sem_release(smx_ctx_thread_sem);
// Signal to the maestro that it has finished:
- xbt_os_sem_release(this->end_);
-
+ xbt_os_thread_cleanup_push((void (*)(void*))xbt_os_sem_release, this->end_);
xbt_os_thread_exit(nullptr);
xbt_os_thread_exit(nullptr);
+ xbt_os_thread_cleanup_pop(0);
}
void ThreadContext::suspend()
}
void ThreadContext::suspend()