diff options
author | pr.jung <pr.jung@samsung.com> | 2015-07-03 18:28:09 +0900 |
---|---|---|
committer | Taeyoung Kim <ty317.kim@samsung.com> | 2015-11-11 21:33:23 -0800 |
commit | fd339614f135820e7295c7d57f7da5a00357401c (patch) | |
tree | 95d06f33f67832f6ab5691214e64e407bf82259a | |
parent | a411107c0ff4a392fe6c7f54f5e4dc522dd6650e (diff) | |
download | libsvi-fd339614f135820e7295c7d57f7da5a00357401c.tar.gz libsvi-fd339614f135820e7295c7d57f7da5a00357401c.tar.bz2 libsvi-fd339614f135820e7295c7d57f7da5a00357401c.zip |
Add count for initialization and deinitialization
Change-Id: I57d95946248397b70c4d59c25cc08a32bd89aa39
Signed-off-by: pr.jung <pr.jung@samsung.com>
-rw-r--r-- | src/feedback.c | 47 |
1 files changed, 36 insertions, 11 deletions
diff --git a/src/feedback.c b/src/feedback.c index 7cb65be..bee3687 100644 --- a/src/feedback.c +++ b/src/feedback.c @@ -30,18 +30,23 @@ #define API __attribute__ ((visibility("default"))) #endif -static bool binit; +static unsigned int init_cnt; +static pthread_mutex_t fmutex = PTHREAD_MUTEX_INITIALIZER; API int feedback_initialize(void) { - if (binit) - return FEEDBACK_ERROR_NONE; - + pthread_mutex_lock(&fmutex); if (!profile) { _E("there is no valid profile module."); + pthread_mutex_unlock(&fmutex); return FEEDBACK_ERROR_NOT_SUPPORTED; } + if (init_cnt++ > 0) { + pthread_mutex_unlock(&fmutex); + return FEEDBACK_ERROR_NONE; + } + /* initialize device */ devices_init(); @@ -49,14 +54,22 @@ API int feedback_initialize(void) if (profile->init) profile->init(); - binit = true; + pthread_mutex_unlock(&fmutex); return FEEDBACK_ERROR_NONE; } API int feedback_deinitialize(void) { - if (!binit) + pthread_mutex_lock(&fmutex); + if (!init_cnt) { + pthread_mutex_unlock(&fmutex); return FEEDBACK_ERROR_NOT_INITIALIZED; + } + + if (init_cnt-- > 1) { + pthread_mutex_unlock(&fmutex); + return FEEDBACK_ERROR_NONE; + } /* deinitialize device */ devices_exit(); @@ -65,7 +78,7 @@ API int feedback_deinitialize(void) if (profile->exit) profile->exit(); - binit = false; + pthread_mutex_unlock(&fmutex); return FEEDBACK_ERROR_NONE; } @@ -76,10 +89,13 @@ API int feedback_play(feedback_pattern_e pattern) int switched; /* check initialize */ - if (!binit) { + pthread_mutex_lock(&fmutex); + if (!init_cnt) { _E("Not initialized"); + pthread_mutex_unlock(&fmutex); return FEEDBACK_ERROR_NOT_INITIALIZED; } + pthread_mutex_unlock(&fmutex); if (pattern <= FEEDBACK_PATTERN_NONE || pattern >= profile->max_pattern) { @@ -120,10 +136,13 @@ API int feedback_play_type(feedback_type_e type, feedback_pattern_e pattern) int switched; /* check initialize */ - if (!binit) { + pthread_mutex_lock(&fmutex); + if (!init_cnt) { _E("Not initialized"); + pthread_mutex_unlock(&fmutex); return FEEDBACK_ERROR_NOT_INITIALIZED; } + pthread_mutex_unlock(&fmutex); if (type <= FEEDBACK_TYPE_NONE || type >= profile->max_type) { @@ -170,10 +189,13 @@ API int feedback_stop(void) int err; /* check initialize */ - if (!binit) { + pthread_mutex_lock(&fmutex); + if (!init_cnt) { _E("Not initialized"); + pthread_mutex_unlock(&fmutex); return FEEDBACK_ERROR_NOT_INITIALIZED; } + pthread_mutex_unlock(&fmutex); /* stop all device */ err = devices_stop(); @@ -196,10 +218,13 @@ API int feedback_is_supported_pattern(feedback_type_e type, feedback_pattern_e p int switched; /* check initialize */ - if (!binit) { + pthread_mutex_lock(&fmutex); + if (!init_cnt) { _E("Not initialized"); + pthread_mutex_unlock(&fmutex); return FEEDBACK_ERROR_NOT_INITIALIZED; } + pthread_mutex_unlock(&fmutex); if (!status) { _E("Invalid parameter : status(NULL)"); |