From b894530e6d9633fc6497b3c404a3ec1bd1a341df Mon Sep 17 00:00:00 2001 From: Nicola Pero Date: Thu, 15 Mar 2001 03:18:09 +0100 Subject: thr.c (objc_thread_add): New function. 2001-03-14 Nicola Pero * thr.c (objc_thread_add): New function. (objc_thread_remove): Ditto. * objc/thr.h: Declare them. * libobjc.def: Mention them. From-SVN: r40479 --- libobjc/ChangeLog | 7 +++++++ libobjc/libobjc.def | 2 ++ libobjc/objc/thr.h | 2 ++ libobjc/thr.c | 29 +++++++++++++++++++++++++++++ 4 files changed, 40 insertions(+) diff --git a/libobjc/ChangeLog b/libobjc/ChangeLog index da822e5..c53b3a5 100644 --- a/libobjc/ChangeLog +++ b/libobjc/ChangeLog @@ -1,3 +1,10 @@ +2001-03-14 Nicola Pero + + * thr.c (objc_thread_add): New function. + (objc_thread_remove): Ditto. + * objc/thr.h: Declare them. + * libobjc.def: Mention them. + 2001-02-28 Ovidiu Predescu * objc-features.texi: Document the @compatibility_alias compiler diff --git a/libobjc/libobjc.def b/libobjc/libobjc.def index a4a6049..7e0a857 100644 --- a/libobjc/libobjc.def +++ b/libobjc/libobjc.def @@ -45,6 +45,8 @@ objc_thread_id objc_thread_set_data objc_thread_set_priority objc_thread_yield +objc_thread_add +objc_thread_remove __objc_class_name_Object __objc_class_name_Protocol __objc_class_name_NXConstantString diff --git a/libobjc/objc/thr.h b/libobjc/objc/thr.h index f904733..59766f6 100644 --- a/libobjc/objc/thr.h +++ b/libobjc/objc/thr.h @@ -96,6 +96,8 @@ int objc_thread_get_priority(void); void * objc_thread_get_data(void); int objc_thread_set_data(void *value); objc_thread_t objc_thread_id(void); +void objc_thread_add(void); +void objc_thread_remove(void); /* Use this to set the hook function that will be called when the diff --git a/libobjc/thr.c b/libobjc/thr.c index f1c957a..437ee57 100644 --- a/libobjc/thr.c +++ b/libobjc/thr.c @@ -531,4 +531,33 @@ objc_condition_signal(objc_condition_t condition) return __objc_condition_signal(condition); } +/* Make the objc thread system aware that a thread which is managed + (started, stopped) by external code could access objc facilities + from now on. This is used when you are interfacing with some + external non-objc-based environment/system - you must call + objc_thread_add() before an alien thread makes any calls to + Objective-C. Do not cause the _objc_became_multi_threaded hook to + be executed. */ +void +objc_thread_add(void) +{ + objc_mutex_lock(__objc_runtime_mutex); + __objc_is_multi_threaded = 1; + __objc_runtime_threads_alive++; + objc_mutex_unlock(__objc_runtime_mutex); +} + +/* Make the objc thread system aware that a thread managed (started, + stopped) by some external code will no longer access objc and thus + can be forgotten by the objc thread system. Call + objc_thread_remove() when your alien thread is done with making + calls to Objective-C. */ +void +objc_thread_remove(void) +{ + objc_mutex_lock(__objc_runtime_mutex); + __objc_runtime_threads_alive--; + objc_mutex_unlock(__objc_runtime_mutex); +} + /* End of File */ -- cgit v1.1