]> rtime.felk.cvut.cz Git - frescor/forb.git/commitdiff
Initialize thread specific data in forb_init()
authorMichal Sojka <sojkam1@fel.cvut.cz>
Fri, 28 Jan 2011 16:04:37 +0000 (17:04 +0100)
committerMichal Sojka <sojkam1@fel.cvut.cz>
Fri, 28 Jan 2011 16:04:37 +0000 (17:04 +0100)
This was done to avoid race conditions which causes errors in code.
Unfortunately this change does not help since FOSA is broken and we will
better use plain POSIX here.

src/executor.c
src/executor.h
src/forb.c

index d7ea4ac3d2516b3d6d8a8f40f2ba827792d6c82c..14977b6d07ac0f1ce7957f1a93def562b92b0457 100644 (file)
 
 extern UL_LOG_CUST(ulogd_forb_executor);
 
-int forb_executor_key = -1;
+static int forb_executor_key = -1;
+
+int forb_executor_prepare()
+{
+       return fosa_key_create(&forb_executor_key);
+}
 
 /** 
  * Initializes executor.
@@ -135,27 +140,12 @@ void forb_executor_unregister_object(forb_executor_t *executor, forb_object obj)
 int forb_executor_run(forb_executor_t *executor)
 {
        int ret;
-       // for thread specific data testing
-#ifdef DEBUG_EXECUTOR
-       forb_executor_t *executor_test;
-#endif
-       
-       // initializing thread specific data (FIXME: maybe should be somewhere else)
-       if (forb_executor_key == -1) {
-               if ((ret = fosa_key_create(&forb_executor_key)))
-                       goto ret;
-       }
+
        // setting pointer to executor as thread specific data
        if ((ret = fosa_thread_set_specific_data(forb_executor_key, 
-                                       fosa_thread_self(), executor)))         
+                                                fosa_thread_self(), executor)))                
                goto ret;
-
-#ifdef DEBUG_EXECUTOR
-       printf("Executor: current executor saved: %p\n", executor);
-       forb_get_current_executor(&executor_test);
-       printf("Executor: current executor loaded: %p\n", executor_test);
-#endif
-
        fosa_mutex_lock(&executor->mutex);
        while (1) {
                fosa_cond_wait(&executor->new_request_in_empty_list,
index 7007c7f46ff254bc6223d3da758d326f29a87d10..06dddcddcd5bf93bb0f7ae4eb444df41948624a3 100644 (file)
@@ -77,6 +77,7 @@ typedef struct forb_executor {
 } forb_executor_t;
 
 
+int forb_executor_prepare(void);
 int forb_executor_init(forb_executor_t *executor);
 void forb_executor_destroy(forb_executor_t *executor);
 int forb_executor_register_object(forb_executor_t *executor, forb_object obj);
index 2b3172226aa6f370e318f039fed4e05891c3ec27..bd7c9a81f64b51163e90d943f8c918f8d21b3a97 100644 (file)
@@ -221,6 +221,8 @@ forb_init(int *argc, char **argv[], const struct forb_init_attr *attr)
                return NULL;
        }
 
+       forb_executor_prepare();        
+
        orb = forb_forb_orb_new(NULL, &forb_implementation, forb);
        if (!orb) goto err2;
        /* Server ID must be assigned manualy */