evas_gl_shader: Fix shader lock mechanism 85/297785/3 accepted/tizen/unified/20230907.055343
authorHubert Stachowiak <h.stachowiak@samsung.com>
Thu, 24 Aug 2023 08:06:29 +0000 (10:06 +0200)
committerChun <jykeon@samsung.com>
Wed, 6 Sep 2023 07:58:28 +0000 (07:58 +0000)
Change-Id: Iac54b071364921b58175814adcfde917579750a9

src/modules/evas/engines/gl_common/evas_gl_shader.c

index 26df4a5..154519f 100755 (executable)
@@ -457,8 +457,10 @@ _shaders_hash_free_cb(void *data)
    _program_del(data);
 }
 
-static void
+//TIZEN_ONLY(20230824) evas_gl_shader.c: Fix shader lock mechanism
+static Eina_Bool
 _shader_lock(Evas_GL_Shared *shared,const char *cache_dir)
+//
 {
    char lock_path[PATH_MAX];
    int ret;
@@ -466,13 +468,17 @@ _shader_lock(Evas_GL_Shared *shared,const char *cache_dir)
    if (ret >= PATH_MAX)
      {
         ERR("Truncated lock path : %s", lock_path);
-        return;
+        //TIZEN_ONLY(20230824) evas_gl_shader: Fix shader lock mechanism
+        return EINA_FALSE;
+        //
      }
    shared->lock_shader = open(lock_path, O_RDWR | O_CREAT , S_IRUSR | S_IWUSR);
    if(shared->lock_shader<0)
      {
         ERR("lock create is failed ");
-        return;
+        //TIZEN_ONLY(20230824) evas_gl_shader: Fix shader lock mechanism
+        return EINA_FALSE;
+        //
      }
 
    /* lock for wait creating shader*/
@@ -484,8 +490,13 @@ _shader_lock(Evas_GL_Shared *shared,const char *cache_dir)
    if (fcntl(shared->lock_shader, F_SETLKW, &filelock) == -1)
      {
         ERR("lock take fail");
-        return;
+        //TIZEN_ONLY(20230824) evas_gl_shader: Fix shader lock mechanism
+        return EINA_FALSE;
+        //
      }
+   //TIZEN_ONLY(20230824) evas_gl_shader: Fix shader lock mechanism
+   return EINA_TRUE;
+   //
 }
 
 static void
@@ -795,7 +806,10 @@ evas_gl_common_shader_program_init(Evas_GL_Shared *shared)
      goto Load;
 
    //shader lock for wait other process
-   _shader_lock(shared,bin_dir_path);
+   //TIZEN_ONLY(20230824) evas_gl_shader: Fix shader lock mechanism
+   if (!_shader_lock(shared,bin_dir_path)) return 0;
+   //
+
    if(_evas_gl_common_shader_binary_init(shared))
      {
         _shader_unlock(shared);