fix open module lost 94/68794/4 accepted/tizen/common/20160511.142206 accepted/tizen/ivi/20160512.050904 accepted/tizen/mobile/20160512.050908 accepted/tizen/tv/20160512.050837 accepted/tizen/wearable/20160512.050851 submit/tizen/20160511.051004
authorJunkyeong Kim <jk0430.kim@samsung.com>
Tue, 10 May 2016 00:51:38 +0000 (09:51 +0900)
committerJunkyeong Kim <jk0430.kim@samsung.com>
Wed, 11 May 2016 05:07:17 +0000 (14:07 +0900)
Change-Id: I2ebae8d762513fc68fccb90649b27a37ac596407
Signed-off-by: Junkyeong Kim <jk0430.kim@samsung.com>
src/backend.c
src/backend.h
src/gbm.c

index 332d960bb54408d9333972e7932a961bcda2983e..13f705f571498518ed7e9c505f5c4e54bcba31a2 100644 (file)
@@ -37,6 +37,8 @@
 
 #define ARRAY_SIZE(a) (sizeof(a)/sizeof((a)[0]))
 
+static void *g_gbm_module;
+
 #if HAVE_TBM
 extern const struct gbm_backend gbm_tbm_backend;
 #endif
@@ -64,6 +66,9 @@ load_backend(const struct backend_desc *backend)
    if (backend == NULL)
       return NULL;
 
+   if (g_gbm_module)
+      return NULL;
+
    name = backend->name;
 
    if (backend->builtin) {
@@ -87,6 +92,7 @@ load_backend(const struct backend_desc *backend)
          return NULL;
       }
    }
+   g_gbm_module = module;
 
    return init;
 }
@@ -132,3 +138,13 @@ _gbm_create_device(int fd)
 
    return dev;
 }
+
+void
+_gbm_close_device(void)
+{
+   if (g_gbm_module) {
+      dlclose(g_gbm_module);
+      g_gbm_module = NULL;
+   }
+}
+
index 4a64375033358c86d0f24b0e3547bda2de3c722d..8609196076e1fd1342116b955e2451a1838acf38 100644 (file)
@@ -32,5 +32,7 @@
 
 struct gbm_device *
 _gbm_create_device(int fd);
+void
+_gbm_close_device(void);
 
 #endif
index b6d207c6b14ae95bb4ce40ea5cc222044d81ffd0..e62b694dd2d0db77b699c1ee20332275b52a9fc6 100644 (file)
--- a/src/gbm.c
+++ b/src/gbm.c
@@ -104,8 +104,10 @@ GBM_EXPORT void
 gbm_device_destroy(struct gbm_device *gbm)
 {
    gbm->refcount--;
-   if (gbm->refcount == 0)
+   if (gbm->refcount == 0) {
       gbm->destroy(gbm);
+      _gbm_close_device();
+   }
 }
 
 /** Create a gbm device for allocating buffers