summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorJuan Linietsky <reduzio@gmail.com>2016-06-25 10:40:33 -0300
committerJuan Linietsky <reduzio@gmail.com>2016-06-25 10:41:23 -0300
commit8dac3bf3b10406d05c4d520e81082e490e3b76ff (patch)
treefa7cd3a9a8f5758855969bf8488b6cd141eb1bbc /drivers
parentc931ed976b5952d7f0972f4c8c4efe279db456ac (diff)
Added function to notify ScriptLanguage when a thread is created/freed, allows scripts to allocate a stack there via TLS
Diffstat (limited to 'drivers')
-rw-r--r--drivers/unix/thread_posix.cpp7
-rw-r--r--drivers/windows/thread_windows.cpp9
2 files changed, 15 insertions, 1 deletions
diff --git a/drivers/unix/thread_posix.cpp b/drivers/unix/thread_posix.cpp
index 6ace64a923..c71e09685b 100644
--- a/drivers/unix/thread_posix.cpp
+++ b/drivers/unix/thread_posix.cpp
@@ -27,6 +27,7 @@
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
#include "thread_posix.h"
+#include "script_language.h"
#if defined(UNIX_ENABLED) || defined(PTHREAD_ENABLED)
@@ -50,7 +51,13 @@ void *ThreadPosix::thread_callback(void *userdata) {
ThreadPosix *t=reinterpret_cast<ThreadPosix*>(userdata);
t->id=(ID)pthread_self();
+
+ ScriptServer::thread_enter(); //scripts may need to attach a stack
+
t->callback(t->user);
+
+ ScriptServer::thread_exit();
+
return NULL;
}
diff --git a/drivers/windows/thread_windows.cpp b/drivers/windows/thread_windows.cpp
index d5e489aab4..434f2e8fda 100644
--- a/drivers/windows/thread_windows.cpp
+++ b/drivers/windows/thread_windows.cpp
@@ -31,6 +31,7 @@
#if defined(WINDOWS_ENABLED) && !defined(WINRT_ENABLED)
#include "os/memory.h"
+#include "script_language.h"
Thread::ID ThreadWindows::get_ID() const {
@@ -45,8 +46,14 @@ Thread* ThreadWindows::create_thread_windows() {
DWORD ThreadWindows::thread_callback( LPVOID userdata ) {
ThreadWindows *t=reinterpret_cast<ThreadWindows*>(userdata);
- t->callback(t->user);
+
+ ScriptServer::thread_enter(); //scripts may need to attach a stack
+
t->id=(ID)GetCurrentThreadId(); // must implement
+ t->callback(t->user);
+
+ ScriptServer::thread_exit();
+
return 0;
}