diff options
Diffstat (limited to 'ivi-layermanagement-api/ilmCommon/src')
-rw-r--r-- | ivi-layermanagement-api/ilmCommon/src/ilm_common.c | 49 |
1 files changed, 36 insertions, 13 deletions
diff --git a/ivi-layermanagement-api/ilmCommon/src/ilm_common.c b/ivi-layermanagement-api/ilmCommon/src/ilm_common.c index b669c66..8152968 100644 --- a/ivi-layermanagement-api/ilmCommon/src/ilm_common.c +++ b/ivi-layermanagement-api/ilmCommon/src/ilm_common.c @@ -35,6 +35,8 @@ ILM_EXPORT ilmErrorTypes ilmControl_init(t_ilm_nativedisplay); ILM_EXPORT void ilmControl_destroy(void); +static pthread_mutex_t g_initialize_lock = PTHREAD_MUTEX_INITIALIZER; + ILM_EXPORT ilmErrorTypes ilm_init(void) { @@ -45,26 +47,47 @@ ILM_EXPORT ilmErrorTypes ilm_initWithNativedisplay(t_ilm_nativedisplay nativedisplay) { ilmErrorTypes err = ILM_SUCCESS; + ilmErrorTypes ret = ILM_FAILED; t_ilm_nativedisplay display = 0; - init_ilmCommonPlatformTable(); + pthread_mutex_lock(&g_initialize_lock); - err = gIlmCommonPlatformFunc.init(nativedisplay); - if (ILM_SUCCESS != err) + do { - return err; - } + init_ilmCommonPlatformTable(); - display = gIlmCommonPlatformFunc.getNativedisplay(); + if (ilm_isInitialized()) + { + fprintf(stderr, "[Warning] ilm_init or ilm_initWithNativedisplay is called,\n" + " but ilmClientLib has been already initialized.\n" + " Returning success and initialization is skipped\n" + " at this time.\n"); + ret = ILM_SUCCESS; + break; + } - err = ilmControl_init(display); - if (ILM_SUCCESS != err) - { - gIlmCommonPlatformFunc.destroy(); - return err; - } + err = gIlmCommonPlatformFunc.init(nativedisplay); + if (ILM_SUCCESS != err) + { + break; + } + + display = gIlmCommonPlatformFunc.getNativedisplay(); + + err = ilmControl_init(display); + if (ILM_SUCCESS != err) + { + gIlmCommonPlatformFunc.destroy(); + break; + } + + ret = ILM_SUCCESS; + + } while (0); + + pthread_mutex_unlock(&g_initialize_lock); - return ILM_SUCCESS; + return ret; } ILM_EXPORT t_ilm_bool |