From: Dave <da...@gu...> - 2008-03-02 04:24:34
|
Carsten Haitzler (The Rasterman) ha scritto: > On Fri, 15 Feb 2008 15:56:12 +0100 "Cedric BAIL" <ced...@fr...> babbled: > > i found a wonderful nasty "bug"... > > 1. edje keeps the eet handle open. > 2. edje uses the string dictionary > 3. what happens if you delete the edj file edje is depending on and it then > tries to make use of any o the strings from the dictionary... :) (hint: some > signal around #11 :)). > > :) > > try this. use some theme X in e. have the source and recompile it (be nice - > delete the original. recompiling the theme in-place is even worse as u screw > with the file that eet has mmaped() in with string dictionary data): > > rm X.edj; edje_cc X.edc > > now go move your mouse around. move a window. bam. segv. :) > > I also get a strange SIGABRT when saving edje file from the editor. The error occur when i call eet_close(). inside the function that crash is eet_dictionary_free(). Dunno what to do, didn't understand well what the dictionary do, and how I have to manage the string inside the edje. I need to investigate deeper :( Also what exactly mean the new field Edje_File->free_strings ?? >> So here we go with the big dangerous patch that could break every thing :-) >> >> I did change the file format to this version finally : >> >> /* Version 3 */ >> /* NB: all int's are stored in network byte order on disk */ >> /* file format: */ >> int magic; /* magic number ie 0x1ee70f42 */ >> int num_directory_entries; /* number of directory entries to follow */ >> int num_dictionary_entries; /* number of dictionary entries to follow */ >> struct >> { >> int data_offset; /* bytes offset into file for data chunk */ >> int size; /* size of the data chunk */ >> int data_size; /* size of the (uncompressed) data chunk */ >> int name_offset; /* bytes offset into file for name string */ >> int name_size; /* length in bytes of the name field */ >> int flags; /* flags - for now 0 = uncompressed, 1 = compressed */ >> } directory[num_directory_entries]; >> struct >> { >> int hash; >> int offset; >> int size; >> int prev; >> int next; >> } dictionary[num_dictionary_entries]; >> /* now start the string stream. */ >> /* and right after them the data stream. */ >> >> All directory and dictionary entry are now aligned, this simplify a >> lot the reading code. With this patch data decoding and encoding use >> the dictionary if provided for string, double and float. As float and >> double are now uniq string, the dictionary act also like a cache for >> float and double string conversion. Old eet_flush is still present in >> eet_lib for archeologist, but as we want compatibility with previous >> eet file format previous eet_internal_read is still in use and work. >> >> I also provide a patch for edje, that should be applied with the eet >> patch. It use the new eet API to prevent unecessary >> evas_stringshare_add and switch edc source file to the new >> EET_T_INLINED_STRING type (This string are compressed inside the >> encoded data and not put inside the dictionary). Previous edje file >> should still work with this update, but only new one will benefit from >> this upgrade. >> >> -- >> Cedric BAIL >> >> > > > |