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 2022/05/17 17:04:17 UTC
[celix] 04/05: Updates component lifecycle state diagram
This is an automated email from the ASF dual-hosted git repository.
pnoltes pushed a commit to branch pnoltes/feature/update_component_and_pattern_documentation
in repository https://gitbox.apache.org/repos/asf/celix.git
commit f66acd6b03d01e0302776af3b4cfdb59a786d3b4
Author: Pepijn Noltes <pe...@gmail.com>
AuthorDate: Tue May 17 18:02:22 2022 +0200
Updates component lifecycle state diagram
---
documents/diagrams/bundles_lifecycle.png | Bin 35564 -> 25453 bytes
documents/diagrams/bundles_lifecycle.puml | 3 +-
documents/diagrams/component_lifecycle.png | Bin 49622 -> 61347 bytes
documents/diagrams/component_lifecycle.puml | 4 +++
libs/framework/src/dm_component_impl.c | 48 +++++++++++++++-------------
5 files changed, 31 insertions(+), 24 deletions(-)
diff --git a/documents/diagrams/bundles_lifecycle.png b/documents/diagrams/bundles_lifecycle.png
index cf621a40..679568a1 100644
Binary files a/documents/diagrams/bundles_lifecycle.png and b/documents/diagrams/bundles_lifecycle.png differ
diff --git a/documents/diagrams/bundles_lifecycle.puml b/documents/diagrams/bundles_lifecycle.puml
index f883386f..5ba61e8d 100644
--- a/documents/diagrams/bundles_lifecycle.puml
+++ b/documents/diagrams/bundles_lifecycle.puml
@@ -14,6 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License.
@startuml
+hide empty description
[*] -> Installed
Installed -down-> Resolved
Resolved -down-> Uninstalled
@@ -30,4 +31,4 @@ state BundleActivation {
Resolved -right-> BundleActivation
BundleActivation -> Resolved
-@enduml
\ No newline at end of file
+@enduml
diff --git a/documents/diagrams/component_lifecycle.png b/documents/diagrams/component_lifecycle.png
index 5af09ca1..ffaa8bc1 100644
Binary files a/documents/diagrams/component_lifecycle.png and b/documents/diagrams/component_lifecycle.png differ
diff --git a/documents/diagrams/component_lifecycle.puml b/documents/diagrams/component_lifecycle.puml
index 19db2876..5d99ab97 100644
--- a/documents/diagrams/component_lifecycle.puml
+++ b/documents/diagrams/component_lifecycle.puml
@@ -44,9 +44,13 @@ Deinitializing -down-> Inactive
Initializing: <i>Calling <b>init</b> callback</i>
Starting: <i>Calling <b>start</b> callback</i>
+Starting: <i>Register provided services async</i>
+Stopping: <i>Unregister provided services</i>
Stopping: <i>Calling <b>stop</b> callback</i>
Deinitializing: <i>Calling <b>deinit</b> callback</i>
+Suspending: <i>Unregister provided services</i>
Suspending: <i>Calling <b>stop</b> callback</i>
Resuming: <i>Calling <b>start</b> callback</i>
+Resuming: <i>Register provided services async</i>
@enduml
diff --git a/libs/framework/src/dm_component_impl.c b/libs/framework/src/dm_component_impl.c
index 6fa7d716..a951efc1 100644
--- a/libs/framework/src/dm_component_impl.c
+++ b/libs/framework/src/dm_component_impl.c
@@ -528,37 +528,39 @@ celix_status_t celix_private_dmComponent_handleEvent(celix_dm_component_t *compo
static celix_status_t celix_dmComponent_suspend(celix_dm_component_t *component, celix_dm_service_dependency_t *dependency) {
celix_status_t status = CELIX_SUCCESS;
- if (component->callbackStop != NULL) {
- celixThreadMutex_lock(&component->mutex);
+ celixThreadMutex_lock(&component->mutex);
+ celix_dmComponent_logTransition(component, celix_dmComponent_currentState(component),
+ CELIX_DM_CMP_STATE_SUSPENDING);
+ celix_dmComponent_setCurrentState(component, CELIX_DM_CMP_STATE_SUSPENDING);
+ celix_dmComponent_unregisterServices(component, false);
+ if (component->callbackStop != NULL ) {
+ status = component->callbackStop(component->implementation);
+ }
+ if (status == CELIX_SUCCESS) {
celix_dmComponent_logTransition(component, celix_dmComponent_currentState(component),
- CELIX_DM_CMP_STATE_SUSPENDING);
- celix_dmComponent_setCurrentState(component, CELIX_DM_CMP_STATE_SUSPENDING);
- celix_dmComponent_unregisterServices(component, false);
- status = component->callbackStop(component->implementation);
- if (status == CELIX_SUCCESS) {
- celix_dmComponent_logTransition(component, celix_dmComponent_currentState(component),
- CELIX_DM_CMP_STATE_SUSPENDED);
- celix_dmComponent_setCurrentState(component, CELIX_DM_CMP_STATE_SUSPENDED);
- } else {
- celix_bundleContext_log(component->context, CELIX_LOG_LEVEL_ERROR,
- "Error stopping component %s (uuid=%s) using the stop callback. Disabling component.",
- component->name,
- component->uuid);
- celix_dmComponent_disableDirectly(component);
- }
- celixThreadMutex_unlock(&component->mutex);
- }
+ CELIX_DM_CMP_STATE_SUSPENDED);
+ celix_dmComponent_setCurrentState(component, CELIX_DM_CMP_STATE_SUSPENDED);
+ } else {
+ celix_bundleContext_log(component->context, CELIX_LOG_LEVEL_ERROR,
+ "Error stopping component %s (uuid=%s) using the stop callback. Disabling component.",
+ component->name,
+ component->uuid);
+ celix_dmComponent_disableDirectly(component);
+ }
+ celixThreadMutex_unlock(&component->mutex);
return status;
}
static celix_status_t celix_dmComponent_resume(celix_dm_component_t *component, celix_dm_service_dependency_t *dependency) {
celix_status_t status = CELIX_SUCCESS;
- celixThreadMutex_lock(&component->mutex);
- if (celix_dmComponent_currentState(component) == CELIX_DM_CMP_STATE_SUSPENDED) {
+ if (celix_dmComponent_currentState(component) == CELIX_DM_CMP_STATE_SUSPENDED) {
+ celixThreadMutex_lock(&component->mutex);
celix_dmComponent_logTransition(component, celix_dmComponent_currentState(component),
CELIX_DM_CMP_STATE_RESUMING);
celix_dmComponent_setCurrentState(component, CELIX_DM_CMP_STATE_RESUMING);
- status = component->callbackStart(component->implementation);
+ if (component->callbackStart != NULL) {
+ status = component->callbackStart(component->implementation);
+ }
if (status == CELIX_SUCCESS) {
celix_dmComponent_registerServices(component, false);
component->nrOfTimesResumed += 1;
@@ -574,8 +576,8 @@ static celix_status_t celix_dmComponent_resume(celix_dm_component_t *component,
celix_dmComponent_disableDirectly(component);
celixThreadMutex_unlock(&component->mutex);
}
+ celixThreadMutex_unlock(&component->mutex);
}
- celixThreadMutex_unlock(&component->mutex);
return status;
}