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 12:09:48 UTC
[11/21] celix git commit: CELIX-210: Fixed an issue to trigger a
state change when required services reapear. Started creating destroy
functions for dm info (used in shell command).
CELIX-210: Fixed an issue to trigger a state change when required services reapear. Started creating destroy functions for dm info (used in shell command).
Project: http://git-wip-us.apache.org/repos/asf/celix/repo
Commit: http://git-wip-us.apache.org/repos/asf/celix/commit/2de2554a
Tree: http://git-wip-us.apache.org/repos/asf/celix/tree/2de2554a
Diff: http://git-wip-us.apache.org/repos/asf/celix/diff/2de2554a
Branch: refs/heads/develop
Commit: 2de2554aebf9093ed037a23589389542cc7563ec
Parents: 8f279cb
Author: Pepijn Noltes <pe...@gmail.com>
Authored: Thu Oct 22 21:04:06 2015 +0200
Committer: Pepijn Noltes <pe...@gmail.com>
Committed: Thu Oct 22 21:04:06 2015 +0200
----------------------------------------------------------------------
.../private/src/dm_activator_base.c | 1 +
.../private/src/dm_component_impl.c | 42 +++++++++++++++-----
.../private/src/dm_dependency_manager_impl.c | 19 +++++++++
.../private/src/dm_service_dependency.c | 7 ++++
.../private/src/dm_shell_list_command.c | 7 +---
.../public/include/dm_component.h | 1 +
.../public/include/dm_dependency_manager.h | 1 +
dependency_manager/public/include/dm_info.h | 1 +
.../public/include/dm_service_dependency.h | 1 +
9 files changed, 65 insertions(+), 15 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/celix/blob/2de2554a/dependency_manager/private/src/dm_activator_base.c
----------------------------------------------------------------------
diff --git a/dependency_manager/private/src/dm_activator_base.c b/dependency_manager/private/src/dm_activator_base.c
index 2928c25..25065a9 100644
--- a/dependency_manager/private/src/dm_activator_base.c
+++ b/dependency_manager/private/src/dm_activator_base.c
@@ -77,6 +77,7 @@ celix_status_t bundleActivator_start(void * userData, bundle_context_pt context)
//Create the service
dependency_activator->info->handle = dependency_activator->manager;
dependency_activator->info->getInfo = (void *)dependencyManager_getInfo;
+ dependency_activator->info->destroyInfo = (void *)dependencyManager_destroyInfo;
bundleContext_registerService(context, DM_INFO_SERVICE_NAME, dependency_activator->info, NULL, &(dependency_activator->reg));
return status;
http://git-wip-us.apache.org/repos/asf/celix/blob/2de2554a/dependency_manager/private/src/dm_component_impl.c
----------------------------------------------------------------------
diff --git a/dependency_manager/private/src/dm_component_impl.c b/dependency_manager/private/src/dm_component_impl.c
index 5aeae6b..500d613 100644
--- a/dependency_manager/private/src/dm_component_impl.c
+++ b/dependency_manager/private/src/dm_component_impl.c
@@ -400,21 +400,19 @@ celix_status_t component_handleAdded(dm_component_pt component, dm_service_depen
case DM_CMP_STATE_INSTANTIATED_AND_WAITING_FOR_REQUIRED: {
bool instanceBound = false;
serviceDependency_isInstanceBound(dependency, &instanceBound);
+ bool required = false;
+ serviceDependency_isRequired(dependency, &required);
if (!instanceBound) {
- bool required = false;
- serviceDependency_isRequired(dependency, &required);
if (required) {
serviceDependency_invokeAdd(dependency, event);
}
dm_event_pt event = NULL;
component_getDependencyEvent(component, dependency, &event);
component_updateInstance(component, dependency, event, false, true);
- } else {
- bool required = false;
- serviceDependency_isRequired(dependency, &required);
- if (required) {
- component_handleChange(component);
- }
+ }
+
+ if (required) {
+ component_handleChange(component);
}
break;
}
@@ -1361,8 +1359,34 @@ celix_status_t component_getComponentInfo(dm_component_pt component, dm_componen
if (status == CELIX_SUCCESS) {
*out = info;
} else if (info != NULL) {
- //TODO cleanup
+ component_destroyComponentInfo(info);
}
return status;
+}
+
+void component_destroyComponentInfo(dm_component_info_pt info) {
+ int i;
+ int size;
+ if (info != NULL) {
+ free(info->state);
+
+ if (info->interfaces != NULL) {
+ size = arrayList_size(info->interfaces);
+ for (i = 0; i < size; i += 1) {
+ char *intf = arrayList_get(info->interfaces, i);
+ free(intf);
+ }
+ arrayList_destroy(info->interfaces);
+ }
+ if (info->dependency_list != NULL) {
+ size = arrayList_size(info->dependency_list);
+ for (i = 0; i < size; i += 1) {
+ dm_service_dependency_info_pt depInfo = arrayList_get(info->dependency_list, i);
+ dependency_destroyDependencyInfo(depInfo);
+ }
+ arrayList_destroy(info->dependency_list);
+ }
+ }
+ free(info);
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/celix/blob/2de2554a/dependency_manager/private/src/dm_dependency_manager_impl.c
----------------------------------------------------------------------
diff --git a/dependency_manager/private/src/dm_dependency_manager_impl.c b/dependency_manager/private/src/dm_dependency_manager_impl.c
index 59ba677..059ce54 100644
--- a/dependency_manager/private/src/dm_dependency_manager_impl.c
+++ b/dependency_manager/private/src/dm_dependency_manager_impl.c
@@ -109,3 +109,22 @@ celix_status_t dependencyManager_getInfo(dm_dependency_manager_pt manager, dm_de
return status;
}
+
+void dependencyManager_destroyInfo(dm_dependency_manager_pt manager, dm_dependency_manager_info_pt info) {
+ return;
+ /*
+ * TODO
+
+ int i;
+ int size;
+ if (info != NULL) {
+ size = arrayList_size(info->components);
+ for (i = 0; i < size; i += 1) {
+ dm_component_info_pt cmpInfo = arrayList_get(info->components, i);
+ component_destroyComponentInfo(cmpInfo);
+ }
+ arrayList_destroy(info->components);
+ }
+ free(info);
+ */
+}
http://git-wip-us.apache.org/repos/asf/celix/blob/2de2554a/dependency_manager/private/src/dm_service_dependency.c
----------------------------------------------------------------------
diff --git a/dependency_manager/private/src/dm_service_dependency.c b/dependency_manager/private/src/dm_service_dependency.c
index 61daa07..e0bf489 100644
--- a/dependency_manager/private/src/dm_service_dependency.c
+++ b/dependency_manager/private/src/dm_service_dependency.c
@@ -657,4 +657,11 @@ celix_status_t serviceDependency_getServiceDependencyInfo(dm_service_dependency_
}
return status;
+}
+
+void dependency_destroyDependencyInfo(dm_service_dependency_info_pt info) {
+ if (info != NULL) {
+ free(info->filter);
+ }
+ free(info);
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/celix/blob/2de2554a/dependency_manager/private/src/dm_shell_list_command.c
----------------------------------------------------------------------
diff --git a/dependency_manager/private/src/dm_shell_list_command.c b/dependency_manager/private/src/dm_shell_list_command.c
index 59f748f..1e70513 100644
--- a/dependency_manager/private/src/dm_shell_list_command.c
+++ b/dependency_manager/private/src/dm_shell_list_command.c
@@ -87,9 +87,7 @@ void dmListCommand_execute(command_pt command, char * line, void (*out)(char *),
interface = arrayList_get(compInfo->interfaces, interfCnt);
sprintf(outString, " |- Interface: %s\n", interface);
out(outString);
- free(interface);
}
- arrayList_destroy(compInfo->interfaces);
int depCnt;
sprintf(outString, "|- Dependencies (%d):\n", arrayList_size(compInfo->dependency_list));
@@ -111,12 +109,9 @@ void dmListCommand_execute(command_pt command, char * line, void (*out)(char *),
dependency->filter
);
out(outString);
- free(dependency->filter);
- free(dependency);
}
- //TODO free compInfo
- arrayList_destroy(compInfo->dependency_list);
+ infoServ->destroyInfo(infoServ->handle, info);
}
}
}
http://git-wip-us.apache.org/repos/asf/celix/blob/2de2554a/dependency_manager/public/include/dm_component.h
----------------------------------------------------------------------
diff --git a/dependency_manager/public/include/dm_component.h b/dependency_manager/public/include/dm_component.h
index ab8ac80..c26cc05 100644
--- a/dependency_manager/public/include/dm_component.h
+++ b/dependency_manager/public/include/dm_component.h
@@ -61,5 +61,6 @@ celix_status_t component_setCallbacks(dm_component_pt component, init_fpt init,
* returns a dm_component_info_pt. Caller has ownership.
*/
celix_status_t component_getComponentInfo(dm_component_pt component, dm_component_info_pt *info);
+void component_destroyComponentInfo(dm_component_info_pt info);
#endif /* COMPONENT_H_ */
http://git-wip-us.apache.org/repos/asf/celix/blob/2de2554a/dependency_manager/public/include/dm_dependency_manager.h
----------------------------------------------------------------------
diff --git a/dependency_manager/public/include/dm_dependency_manager.h b/dependency_manager/public/include/dm_dependency_manager.h
index ab6e27f..44c1643 100644
--- a/dependency_manager/public/include/dm_dependency_manager.h
+++ b/dependency_manager/public/include/dm_dependency_manager.h
@@ -45,5 +45,6 @@ celix_status_t dependencyManager_remove(dm_dependency_manager_pt manager, dm_com
* returns a dm_ of dm_dependency_manager_info. Caller has ownership.
*/
celix_status_t dependencyManager_getInfo(dm_dependency_manager_pt manager, dm_dependency_manager_info_pt *info);
+void dependencyManager_destroyInfo(dm_dependency_manager_pt manager, dm_dependency_manager_info_pt info);
#endif /* DM_DEPENDENCY_MANAGER_H_ */
http://git-wip-us.apache.org/repos/asf/celix/blob/2de2554a/dependency_manager/public/include/dm_info.h
----------------------------------------------------------------------
diff --git a/dependency_manager/public/include/dm_info.h b/dependency_manager/public/include/dm_info.h
index ee6a4d8..16ee0f8 100644
--- a/dependency_manager/public/include/dm_info.h
+++ b/dependency_manager/public/include/dm_info.h
@@ -56,6 +56,7 @@ struct dm_info_service {
/*Note: dm_caller has the ownership of the result.*/
celix_status_t (*getInfo)(void *handle, dm_dependency_manager_info_pt *info);
+ void (*destroyInfo)(void *handle, dm_service_dependency_info_pt info);
};
typedef struct dm_info_service * dm_info_service_pt;
http://git-wip-us.apache.org/repos/asf/celix/blob/2de2554a/dependency_manager/public/include/dm_service_dependency.h
----------------------------------------------------------------------
diff --git a/dependency_manager/public/include/dm_service_dependency.h b/dependency_manager/public/include/dm_service_dependency.h
index 4a9c991..337be01 100644
--- a/dependency_manager/public/include/dm_service_dependency.h
+++ b/dependency_manager/public/include/dm_service_dependency.h
@@ -59,5 +59,6 @@ celix_status_t serviceDependency_setAutoConfigure(dm_service_dependency_pt depen
* Return a service dependency info. The caller is the owner
*/
celix_status_t serviceDependency_getServiceDependencyInfo(dm_service_dependency_pt, dm_service_dependency_info_pt *info);
+void dependency_destroyDependencyInfo(dm_service_dependency_info_pt info);
#endif /* DM_SERVICE_DEPENDENCY_H_ */