[prev in list] [next in list] [prev in thread] [next in thread] 

List:       enlightenment-devel
Subject:    Re: [E-devel] [EGIT] [core/efl] master 02/04: cmdline iface - fix to consume input array AND strings
From:       Carsten Haitzler (The Rasterman) <raster () rasterman ! com>
Date:       2019-02-15 12:02:01
Message-ID: 20190215120201.473e6a719662bea05b35f8a4 () rasterman ! com
[Download RAW message or body]

On Fri, 15 Feb 2019 12:05:22 +0100 Marcel Hollerbach <mail@bu5hm4n.de> said:

> Thank you for taking care of this. However:
> 
> - you broke the C# bindings. (efl_csharp_application.cs:108)
> - You forgot to annotate that the array has the ownership of the array
> (array<const(stringshare)> @owned; != (array<const(stringshare) @owned>
> @owned;

shouldn't it be:

array<const(stringshare) @owned> @owned

?

> Greetings,
>    bu5hm4n
> 
> On 2/15/19 11:27 AM, Carsten Haitzler wrote:
> > raster pushed a commit to branch master.
> > 
> > http://git.enlightenment.org/core/efl.git/commit/?id=8e98c7eef9cdc6b337841fdd11d5b2c8a3079067
> > 
> > commit 8e98c7eef9cdc6b337841fdd11d5b2c8a3079067
> > Author: Carsten Haitzler (Rasterman) <raster@rasterman.com>
> > Date:   Thu Feb 14 11:28:23 2019 +0000
> > 
> >     cmdline iface - fix to consume input array AND strings totally
> >     
> >     strings often enough are generated e.g. via "%s/%s" or "%i" or similar
> >     etc. ... i have poitned to examples, so move to make all strings
> >     consistently stringshared, fix a bug added to the efl thread code
> >     where it accessed and freed array even tho array was consumed (but not
> >     strings) in the set, and the code used free to consume not
> >     stringshare_del. fix other code and tests to match
> >     
> >     EXCTLY the kind of bugs and mistakes with this kind of design that i
> >     said would happen more often just happened...
> > ---
> >  src/lib/ecore/efl_core_command_line.c  |  3 +++
> >  src/lib/ecore/efl_core_command_line.eo |  2 +-
> >  src/lib/ecore/efl_loop.c               |  5 ++++-
> >  src/lib/ecore/efl_thread.c             |  4 +---
> >  src/tests/ecore/efl_app_test_cml.c     | 14 +++++++-------
> >  5 files changed, 16 insertions(+), 12 deletions(-)
> > 
> > diff --git a/src/lib/ecore/efl_core_command_line.c
> > b/src/lib/ecore/efl_core_command_line.c index 24cab90b0e..bd6d21f2d4 100644
> > --- a/src/lib/ecore/efl_core_command_line.c
> > +++ b/src/lib/ecore/efl_core_command_line.c
> > @@ -223,6 +223,8 @@ _efl_core_command_line_command_array_set(Eo *obj
> > EINA_UNUSED, Efl_Core_Command_L
> > eina_stringshare_del(eina_array_pop(pd->command));
> > eina_array_free(pd->command); pd->command = NULL;
> > +             for (;i < (array ? eina_array_count(array) : 0); ++i)
> > +               eina_stringshare_del(content);
> >               eina_array_free(array);
> >               return EINA_FALSE;
> >            }
> > @@ -236,6 +238,7 @@ _efl_core_command_line_command_array_set(Eo *obj
> > EINA_UNUSED, Efl_Core_Command_L _remove_invalid_chars(param);
> >          eina_array_push(pd->command, eina_stringshare_add(param));
> >          free(param);
> > +        eina_stringshare_del(content);
> >       }
> >     pd->string_command = eina_strbuf_release(command);
> >     pd->filled = EINA_TRUE;
> > diff --git a/src/lib/ecore/efl_core_command_line.eo
> > b/src/lib/ecore/efl_core_command_line.eo index 436720d9bd..25b7c88b6e 100644
> > --- a/src/lib/ecore/efl_core_command_line.eo
> > +++ b/src/lib/ecore/efl_core_command_line.eo
> > @@ -60,7 +60,7 @@ mixin @beta Efl.Core.Command_Line {
> >          return : bool; [[On success $true, $false otherwise]]
> >        }
> >        values {
> > -        array : array<string> @owned; [[An array where every array field
> > is an argument]]
> > +        array : array<const(stringshare)> @owned; [[An array where every
> > array field is an argument]] }
> >      }
> >      @property command_string {
> > diff --git a/src/lib/ecore/efl_loop.c b/src/lib/ecore/efl_loop.c
> > index 342a6f7725..1096c62bdb 100644
> > --- a/src/lib/ecore/efl_loop.c
> > +++ b/src/lib/ecore/efl_loop.c
> > @@ -390,8 +390,11 @@ ecore_loop_arguments_send(int argc, const char **argv)
> >     cml = eina_array_new(argc);
> >     for (i = 0; i < argc; i++)
> >       {
> > -        Eina_Stringshare *arg = eina_stringshare_add(argv[i]);
> > +        Eina_Stringshare *arg;
> > +
> > +        arg = eina_stringshare_add(argv[i]);
> >          eina_array_push(arga, arg);
> > +        arg = eina_stringshare_add(argv[i]);
> >          eina_array_push(cml, arg);
> >       }
> >  
> > diff --git a/src/lib/ecore/efl_thread.c b/src/lib/ecore/efl_thread.c
> > index a324af4f58..421c92dba7 100644
> > --- a/src/lib/ecore/efl_thread.c
> > +++ b/src/lib/ecore/efl_thread.c
> > @@ -277,11 +277,9 @@ _efl_thread_main(void *data, Eina_Thread t)
> >                                            it->func, it->user_data);
> >       }
> >     efl_core_command_line_command_array_set(obj, thdat->argv);
> > +   thdat->argv = NULL;
> >     efl_future_then(obj, efl_loop_job(obj),
> >                     .success = _efl_loop_arguments_send);
> > -
> > -   while (thdat->argv && eina_array_count(thdat->argv))
> > free(eina_array_pop(thdat->argv));
> > -   eina_array_free(thdat->argv);
> >     free(thdat->event_cb);
> >     thdat->event_cb = NULL;
> >  
> > diff --git a/src/tests/ecore/efl_app_test_cml.c
> > b/src/tests/ecore/efl_app_test_cml.c index 1b7cebf552..33024dabb8 100644
> > --- a/src/tests/ecore/efl_app_test_cml.c
> > +++ b/src/tests/ecore/efl_app_test_cml.c
> > @@ -23,13 +23,13 @@ _construct_array(void)
> >  {
> >     Eina_Array *array = eina_array_new(16);
> >  
> > -   eina_array_push(array, "/bin/sh");
> > -   eina_array_push(array, "-C");
> > -   eina_array_push(array, "foo");
> > -   eina_array_push(array, "--test");
> > -   eina_array_push(array, "--option=done");
> > -   eina_array_push(array, "--");
> > -   eina_array_push(array, "asdf --test");
> > +   eina_array_push(array, eina_stringshare_add("/bin/sh"));
> > +   eina_array_push(array, eina_stringshare_add("-C"));
> > +   eina_array_push(array, eina_stringshare_add("foo"));
> > +   eina_array_push(array, eina_stringshare_add("--test"));
> > +   eina_array_push(array, eina_stringshare_add("--option=done"));
> > +   eina_array_push(array, eina_stringshare_add("--"));
> > +   eina_array_push(array, eina_stringshare_add("asdf --test"));
> >     return array;
> >  }
> >  
> > 


-- 
------------- Codito, ergo sum - "I code, therefore I am" --------------
Carsten Haitzler - raster@rasterman.com



_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic