eet - fix loading eet files that do not have dicts
authorCarsten Haitzler (Rasterman) <raster@rasterman.com>
Mon, 14 Oct 2019 11:14:26 +0000 (12:14 +0100)
committerWonki Kim <wonki_.kim@samsung.com>
Mon, 11 Nov 2019 02:18:25 +0000 (11:18 +0900)
my performance fix for locking around the eet dict breaks if there is
no dict in the eet file. this causes a segv.

fixes T8368

@fix

src/lib/eet/eet_data.c

index f8293ed..5bcf65f 100644 (file)
@@ -2283,11 +2283,11 @@ eet_data_read_cipher(Eet_File            *ef,
           return NULL;
      }
 
-   eet_dictionary_lock_read(ed); // XXX: get manual eet_dictionary lock
+   if (ed) eet_dictionary_lock_read(ed); // XXX: get manual eet_dictionary lock
    eet_free_context_init(&context);
    data_dec = _eet_data_descriptor_decode(&context, ed, edd, data, size, NULL, 0);
    eet_free_context_shutdown(&context);
-   eet_dictionary_unlock(ed); // XXX: release manual eet_dictionary lock
+   if (ed) eet_dictionary_unlock(ed); // XXX: release manual eet_dictionary lock
 
    if (required_free)
      free((void *)data);
@@ -2324,11 +2324,11 @@ eet_data_read_cipher_buffer(Eet_File            *ef,
           return NULL;
      }
 
-   eet_dictionary_lock_read(ed); // XXX: get manual eet_dictionary lock
+   if (ed) eet_dictionary_lock_read(ed); // XXX: get manual eet_dictionary lock
    eet_free_context_init(&context);
    data_dec = _eet_data_descriptor_decode(&context, ed, edd, data, size, buffer, buffer_size);
    eet_free_context_shutdown(&context);
-   eet_dictionary_unlock(ed); // XXX: release manual eet_dictionary lock
+   if (ed) eet_dictionary_unlock(ed); // XXX: release manual eet_dictionary lock
 
    if (required_free)
      free((void *)data);
@@ -2361,11 +2361,11 @@ eet_data_node_read_cipher(Eet_File   *ef,
           return NULL;
      }
 
-   eet_dictionary_lock_read(ed); // XXX: get manual eet_dictionary lock
+   if (ed) eet_dictionary_lock_read(ed); // XXX: get manual eet_dictionary lock
    eet_free_context_init(&context);
    result = _eet_data_descriptor_decode(&context, ed, NULL, data, size, NULL, 0);
    eet_free_context_shutdown(&context);
-   eet_dictionary_unlock(ed); // XXX: release manual eet_dictionary lock
+   if (ed) eet_dictionary_unlock(ed); // XXX: release manual eet_dictionary lock
 
    if (required_free)
      free((void *)data);
@@ -4839,11 +4839,11 @@ eet_data_dump_cipher(Eet_File         *ef,
           return 0;
      }
 
-   eet_dictionary_lock_read(ed); // XXX: get manual eet_dictionary lock
+   if (ed) eet_dictionary_lock_read(ed); // XXX: get manual eet_dictionary lock
    eet_free_context_init(&context);
    result = _eet_data_descriptor_decode(&context, ed, NULL, data, size, NULL, 0);
    eet_free_context_shutdown(&context);
-   eet_dictionary_unlock(ed); // XXX: release manual eet_dictionary lock
+   if (ed) eet_dictionary_unlock(ed); // XXX: release manual eet_dictionary lock
 
    eet_node_dump(result, 0, dumpfunc, dumpdata);