]> rtime.felk.cvut.cz Git - frescor/forb.git/commitdiff
Added a function forb_get_current_executor()
authorPetr Beneš <petr@petr-nb.(none)>
Tue, 25 Jan 2011 16:08:54 +0000 (17:08 +0100)
committerPetr Beneš <petr@petr-nb.(none)>
Tue, 25 Jan 2011 16:08:54 +0000 (17:08 +0100)
src/executor.c
src/executor.h

index 8c9229a3f78dc4473aefb8b98fb8cb30864dd980..d7ea4ac3d2516b3d6d8a8f40f2ba827792d6c82c 100644 (file)
@@ -57,6 +57,7 @@
 #include "exec_req.h"
 #include "object.h"
 #include <ul_log.h>
+#include <stdio.h>
 
 extern UL_LOG_CUST(ulogd_forb_executor);
 
@@ -134,17 +135,27 @@ 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))
+               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(), (void *) executor))         
+       if ((ret = fosa_thread_set_specific_data(forb_executor_key, 
+                                       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,
@@ -193,14 +204,17 @@ error:
 /**
  * Determines the executor we are currently in.
  *
- * @param executor Current executor.
+ * @param executor Current executor pointer.
  *
  * @return Zero in case of success.
  */
-int forb_get_current_executor(forb_executor_t *executor)
+int forb_get_current_executor(forb_executor_t **executor)
 {
        int ret;
        ret = fosa_thread_get_specific_data(forb_executor_key, 
-                                           fosa_thread_self(), &executor);
+                                           fosa_thread_self(), ((void *) executor));
+                                           
+       if (ret)
+               *executor = NULL;
        return ret;
 }
index 135d24e9d43d54e9078b961c98572bd5474de11a..7007c7f46ff254bc6223d3da758d326f29a87d10 100644 (file)
@@ -84,6 +84,6 @@ void forb_executor_unregister_object(forb_executor_t *executor, forb_object obj)
 int forb_executor_run(forb_executor_t *executor);
 
 int forb_execute_object(forb_object obj);
-int forb_get_current_executor(forb_executor_t *executor);
+int forb_get_current_executor(forb_executor_t **executor);
 
 #endif