thr.c (objc_thread_add): New function.
authorNicola Pero <n.pero@mi.flashnet.it>
Thu, 15 Mar 2001 02:18:09 +0000 (03:18 +0100)
committerStan Shebs <shebs@gcc.gnu.org>
Thu, 15 Mar 2001 02:18:09 +0000 (02:18 +0000)
2001-03-14  Nicola Pero  <n.pero@mi.flashnet.it>

        * 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
libobjc/libobjc.def
libobjc/objc/thr.h
libobjc/thr.c

index da822e57a7b292a3e34937258cc37669adb2fbee..c53b3a5b9132d0af557b7cc58e0f4b08dd0be057 100644 (file)
@@ -1,3 +1,10 @@
+2001-03-14  Nicola Pero  <n.pero@mi.flashnet.it>
+
+       * 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  <ovidiu@cup.hp.com>
 
        * objc-features.texi: Document the @compatibility_alias compiler
index a4a6049e816ff0fb22de11d589a6cb1c9dc82595..7e0a857ecf770345209540d2a2c6b649664fa5c6 100644 (file)
@@ -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
index f904733695a8dcae589611a625803f84d86f9e66..59766f6ed7db36a84baae01ad0c86d7225269035 100644 (file)
@@ -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 
index f1c957aaa15c79a784e7926483d32ce6d25790e6..437ee5778109aac1cbb384448be6ff0585d86d85 100644 (file)
@@ -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 */