eio: don't free internal data.
authorCedric BAIL <cedric.bail@free.fr>
Mon, 19 Sep 2011 12:47:02 +0000 (12:47 +0000)
committerCedric BAIL <cedric.bail@free.fr>
Mon, 19 Sep 2011 12:47:02 +0000 (12:47 +0000)
SVN revision: 63479

legacy/eio/src/lib/eio_private.h
legacy/eio/src/lib/eio_xattr.c

index a501801..13bb825 100644 (file)
@@ -199,6 +199,8 @@ struct _Eio_File_Xattr
        int xattr_int;
      } xint;
    } todo;
+
+   Eina_Bool set : 1;
 };
 
 struct _Eio_File_Progress
index 38d235f..bcbc6fd 100644 (file)
@@ -112,8 +112,11 @@ _eio_file_xattr_free(Eio_File_Xattr *async)
 {
    eina_stringshare_del(async->path);
    eina_stringshare_del(async->attribute);
-   if (async->op == EIO_XATTR_DATA) free(async->todo.xdata.xattr_data);
-   if (async->op == EIO_XATTR_STRING) free(async->todo.xstring.xattr_string);
+   if (!async->set)
+     {
+       if (async->op == EIO_XATTR_DATA) free(async->todo.xdata.xattr_data);
+       if (async->op == EIO_XATTR_STRING) free(async->todo.xstring.xattr_string);
+     }
    free(async);
 }
 
@@ -215,6 +218,7 @@ _eio_file_xattr_setup_get(Eio_File_Xattr *async,
 {
    async->path = eina_stringshare_add(path);
    async->attribute = eina_stringshare_add(attribute);
+   async->set = EINA_FALSE;
 
    if (!eio_file_set(&async->common,
                      NULL,
@@ -240,6 +244,7 @@ _eio_file_xattr_setup_set(Eio_File_Xattr *async,
    async->path = eina_stringshare_add(path);
    async->attribute = eina_stringshare_add(attribute);
    async->flags = flags;
+   async->set = EINA_TRUE;
 
    if (!eio_file_set(&async->common,
                      done_cb,