You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@celix.apache.org by ab...@apache.org on 2011/05/31 11:08:35 UTC
svn commit: r1129581 -
/incubator/celix/trunk/framework/private/src/framework.c
Author: abroekhuis
Date: Tue May 31 09:08:35 2011
New Revision: 1129581
URL: http://svn.apache.org/viewvc?rev=1129581&view=rev
Log:
Updated framework to use APR for threading
Modified:
incubator/celix/trunk/framework/private/src/framework.c
Modified: incubator/celix/trunk/framework/private/src/framework.c
URL: http://svn.apache.org/viewvc/incubator/celix/trunk/framework/private/src/framework.c?rev=1129581&r1=1129580&r2=1129581&view=diff
==============================================================================
--- incubator/celix/trunk/framework/private/src/framework.c (original)
+++ incubator/celix/trunk/framework/private/src/framework.c Tue May 31 09:08:35 2011
@@ -35,6 +35,7 @@
#include <apr_strings.h>
#include <apr_thread_cond.h>
#include <apr_thread_mutex.h>
+#include <apr_thread_proc.h>
#include "framework.h"
#include "filter.h"
@@ -1213,7 +1214,8 @@ celix_status_t framework_waitForStop(FRA
return CELIX_SUCCESS;
}
-static void * framework_shutdown(void * framework) {
+static void *APR_THREAD_FUNC framework_shutdown(apr_thread_t *thd, void *framework) {
+//static void * framework_shutdown(void * framework) {
FRAMEWORK fw = (FRAMEWORK) framework;
HASH_MAP_ITERATOR iterator = hashMapIterator_create(fw->installedBundleMap);
@@ -1229,7 +1231,7 @@ static void * framework_shutdown(void *
int err = apr_thread_mutex_lock(fw->mutex);
if (err != 0) {
celix_log("Error locking the framework, cannot exit clean.");
- pthread_exit(NULL);
+ apr_thread_exit(thd, APR_ENOLOCK);
return NULL;
}
err = apr_thread_cond_broadcast(fw->shutdownGate);
@@ -1240,7 +1242,7 @@ static void * framework_shutdown(void *
celix_log("Error unlocking the framework, cannot exit clean.");
}
- pthread_exit(NULL);
+ apr_thread_exit(thd, APR_ENOLOCK);
return NULL;
}
err = apr_thread_mutex_unlock(fw->mutex);
@@ -1248,7 +1250,7 @@ static void * framework_shutdown(void *
celix_log("Error unlocking the framework, cannot exit clean.");
}
- pthread_exit(NULL);
+ apr_thread_exit(thd, APR_SUCCESS);
return NULL;
}
@@ -1259,19 +1261,23 @@ celix_status_t bundleActivator_start(voi
}
celix_status_t bundleActivator_stop(void * userData, BUNDLE_CONTEXT context) {
- pthread_t shutdownThread;
+ celix_status_t status = CELIX_SUCCESS;
+
+ apr_thread_t *shutdownThread;
FRAMEWORK framework;
if (bundleContext_getFramework(context, &framework) == CELIX_SUCCESS) {
- int err = pthread_create(&shutdownThread, NULL, framework_shutdown, framework);
- if (err != 0) {
- celix_log("Could not create shutdown thread, normal exit not possible.");
- return CELIX_BUNDLE_EXCEPTION;
- }
- return CELIX_SUCCESS;
+
+ if (apr_thread_create(&shutdownThread, NULL, framework_shutdown, framework, framework->mp) == APR_SUCCESS) {
+ //int err = pthread_create(&shutdownThread, NULL, framework_shutdown, framework);
+ } else {
+ celix_log("Could not create shutdown thread, normal exit not possible.");
+ status = CELIX_FRAMEWORK_EXCEPTION;
+ }
} else {
- return CELIX_FRAMEWORK_EXCEPTION;
+ status = CELIX_FRAMEWORK_EXCEPTION;
}
+ return status;
}
celix_status_t bundleActivator_destroy(void * userData, BUNDLE_CONTEXT context) {