From: Gustavo S. B. <bar...@pr...> - 2013-01-23 15:00:01
|
On Wed, Jan 23, 2013 at 12:41 PM, Guillaume Friloux <gui...@as...> wrote: > On 23/01/2013 15:34, Gustavo Sverzut Barbieri wrote: >> >> On Wed, Jan 23, 2013 at 12:31 PM, Guillaume Friloux >> <gui...@as...> wrote: >>> >>> On 23/01/2013 15:03, Gustavo Sverzut Barbieri wrote: >>>> >>>> On Wed, Jan 23, 2013 at 11:00 AM, Enlightenment SVN >>>> <no-...@en...> wrote: >>>>> >>>>> Log: >>>>> Fix mysql backend to make blobs working. >>>>> >>>>> blob.ops = NULL; >>>>> blob.memory = row[i].string; >>>>> - blob.size = rows->lengths[i];; >>>>> + blob.size = rows->lengths[i]; >>>>> eina_value_setup(&val, EINA_VALUE_TYPE_BLOB); >>>>> - eina_value_set(&val, &blob); >>>>> + eina_value_set(&val, blob); >>>>> break; >>>> >>>> likely here we need to duplicate row[i].string and use blob.ops = >>>> EINA_VALUE_BLOB_OPERATIONS_MALLOC? >>>> >>> Using operations will fail because the free() pointer will be called 3 >>> times, on the same data : one in the flush of the result_cb from the app, >>> and two from esql (the first one when getting the row, the second one >>> when >>> freeing the structure) >> >> that's another bug, need to fix that. it's invalid to flush an >> eina_value that is already flushed. Maybe I should add a CRITICAL in >> there to avoid doing such? >> > Theres maybe a big mistake. > Yet, in esql, all the eina_values for strings and blobs doesnt get their > data duped by eina_value. it uses directly the same pointers. it doesn't for strings, as I pasted before it will strdup when you call eina_value_set(). for blob, it does not copy. That part is correct, you give it copied or not, along with the ops that specify how to copy, convert and free it. > Which makes flush to just work as it doesnt frees the data. this is the lack of blob.ops. > If you plan to change this, to make eina_value to free the data, then the 3 > modules must be changed. There is nothing to change in eina_value, maybe a critical error to alert about double flush. -- Gustavo Sverzut Barbieri http://profusion.mobi embedded systems -------------------------------------- MSN: bar...@gm... Skype: gsbarbieri Mobile: +55 (19) 9225-2202 |