You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@celix.apache.org by pn...@apache.org on 2015/11/03 16:09:41 UTC

[15/50] [abbrv] celix git commit: CELIX-280: 280 fixed deployment_admin shutdown

CELIX-280: 280 fixed deployment_admin shutdown


Project: http://git-wip-us.apache.org/repos/asf/celix/repo
Commit: http://git-wip-us.apache.org/repos/asf/celix/commit/6c938519
Tree: http://git-wip-us.apache.org/repos/asf/celix/tree/6c938519
Diff: http://git-wip-us.apache.org/repos/asf/celix/diff/6c938519

Branch: refs/heads/master
Commit: 6c9385199bf2bb026c4919b2def71d2eda4f0ff0
Parents: 9550e63
Author: Bjoern Petri <bp...@apache.org>
Authored: Sun Oct 25 16:00:57 2015 +0100
Committer: Bjoern Petri <bp...@apache.org>
Committed: Sun Oct 25 16:00:57 2015 +0100

----------------------------------------------------------------------
 deployment_admin/private/src/deployment_admin.c | 24 ++++++++++++++------
 1 file changed, 17 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/celix/blob/6c938519/deployment_admin/private/src/deployment_admin.c
----------------------------------------------------------------------
diff --git a/deployment_admin/private/src/deployment_admin.c b/deployment_admin/private/src/deployment_admin.c
index 7a78012..7e936e4 100644
--- a/deployment_admin/private/src/deployment_admin.c
+++ b/deployment_admin/private/src/deployment_admin.c
@@ -67,7 +67,7 @@ static void* deploymentAdmin_poll(void *deploymentAdmin);
 celix_status_t deploymentAdmin_download(deployment_admin_pt admin, char * url, char **inputFile);
 size_t deploymentAdmin_writeData(void *ptr, size_t size, size_t nmemb, FILE *stream);
 static celix_status_t deploymentAdmin_deleteTree(char * directory);
-celix_status_t deploymentAdmin_readVersions(deployment_admin_pt admin, array_list_pt *versions);
+celix_status_t deploymentAdmin_readVersions(deployment_admin_pt admin, array_list_pt versions);
 
 celix_status_t deploymentAdmin_stopDeploymentPackageBundles(deployment_admin_pt admin, deployment_package_pt target);
 celix_status_t deploymentAdmin_updateDeploymentPackageBundles(deployment_admin_pt admin, deployment_package_pt source);
@@ -145,6 +145,10 @@ celix_status_t deploymentAdmin_create(bundle_context_pt context, deployment_admi
 celix_status_t deploymentAdmin_destroy(deployment_admin_pt admin) {
 	celix_status_t status = CELIX_SUCCESS;
 
+    admin->running = false;
+
+    celixThread_join(admin->poller, NULL);
+
 	hash_map_iterator_pt iter = hashMapIterator_create(admin->packages);
 
 	while (hashMapIterator_hasNext(iter)) {
@@ -214,7 +218,9 @@ static void *deploymentAdmin_poll(void *deploymentAdmin) {
 	while (admin->running) {
 		//poll ace
 		array_list_pt versions = NULL;
-		deploymentAdmin_readVersions(admin, &versions);
+	    arrayList_create(&versions);
+
+		deploymentAdmin_readVersions(admin, versions);
 
 		char *last = arrayList_get(versions, arrayList_size(versions) - 1);
 
@@ -299,10 +305,12 @@ static void *deploymentAdmin_poll(void *deploymentAdmin) {
 				}
 			}
 		}
+
 		sleep(5);
+
+		arrayList_destroy(versions);
 	}
 
-	celixThread_exit(NULL);
 	return NULL;
 }
 
@@ -329,9 +337,9 @@ size_t deploymentAdmin_parseVersions(void *contents, size_t size, size_t nmemb,
 	return realsize;
 }
 
-celix_status_t deploymentAdmin_readVersions(deployment_admin_pt admin, array_list_pt *versions) {
+celix_status_t deploymentAdmin_readVersions(deployment_admin_pt admin, array_list_pt versions) {
 	celix_status_t status = CELIX_SUCCESS;
-	arrayList_create(versions);
+
 	CURL *curl;
 	CURLcode res;
 	curl = curl_easy_init();
@@ -353,12 +361,14 @@ celix_status_t deploymentAdmin_readVersions(deployment_admin_pt admin, array_lis
 		char *last;
 		char *token = strtok_r(chunk.memory, "\n", &last);
 		while (token != NULL) {
-			arrayList_add(*versions, strdup(token));
+			arrayList_add(versions, strdup(token));
 			token = strtok_r(NULL, "\n", &last);
 		}
 	}
 
-
+    if (chunk.memory) {
+        free(chunk.memory);
+    }
 
 	return status;
 }