On Fri, Apr 25, 2008 at 10:15 AM, Cedric BAIL <[EMAIL PROTECTED]> wrote:
>
> On Thu, Apr 24, 2008 at 11:15 PM, Gustavo Sverzut Barbieri
>  <[EMAIL PROTECTED]> wrote:
>  > On Thu, Apr 24, 2008 at 1:57 PM, Cedric BAIL <[EMAIL PROTECTED]> wrote:
>  >  > On Wed, Apr 23, 2008 at 4:45 PM, The Rasterman Carsten Haitzler
>  >  >  <[EMAIL PROTECTED]> wrote:
>  >  >  > On Tue, 15 Apr 2008 13:15:13 -0300 "Gustavo Sverzut Barbieri"
>  >  >  >  <[EMAIL PROTECTED]> babbled:
>  >  >  >  > For simplicity, I would just process one message per callback from
>  >  >  >  > ecore_fd_main... but we can also use a poll/select inside this
>  >  >  >  > function and do what you want, without the need to fcntl to
>  >  >  >  > NONBLOCKING.
>  >  >  >
>  >  >  >  just read a buffer of messages - if we don't get a complete 
> message, store the
>  >  >  >  partial one and keep it until the next call to process events then 
> complete the
>  >  >  >  message fetch.
>  >  >
>  >  >  Ok. Here is an updated patch. The fd is still nonblocking and on
>  >  >  partial read, it should be able to just restart cleany at a later
>  >  >  time. You will now pass a function pointer so that you can call
>  >  >  whatever kind of code you want (I doubt we really need something else
>  >  >  than evas_object_event_callback). I also make it optional. Some more
>  >  >  comments ?
>  >
>  >  configure: s/build_async/build_async_events/g; make it default on (use
>  >  "auto" to check for pthread, "yes" would fail without pthread and "no"
>  >  is... well no).
>  >
>  >    +static pthread_mutex_t _mutex;
>  >
>  >  i think it's safer to just initialize the mutex here using (and remove
>  >  the destroy call):
>  >
>  >    static pthread_mutex_t _mutex = PTHREAD_MUTEX_INITIALIZER;
>  >
>  >  evas_async_events_process(void):
>  >
>  >    +   if (_fd_read != -1)
>  >    +     do
>  >
>  >  reverse this logic: if (_d_read == -1) return 0;
>  >  this will avoid the unnecessary nesting and would remove the bug that
>  >  it have today: "check" might be uninitialized in this function.
>  >     Actually write the whole function like (more beautiful imho):
>  >
>  >    if (_fd_read == -1)
>  >      return -1;
>  >
>  >    count = 0;
>  >    while ((check = read(_fd_read, ((char *)&current) + size,
>  >  sizeof(current) - size)) > 0)
>  >      {
>  >         size += check;
>  >         if (size < sizeof(current))
>  >           continue;
>  >
>  >         if (current.func)
>  >           current.func(current.target, current.type, current.event_info);
>  >          size = 0;
>  >           count++;
>  >      }
>  >    if (check < 0) {
>  >        ...;
>  >        _fd_read = -1;
>  >    }
>  >    return count;
>  >
>  >
>  >  For evas_async_events_put, also reverse the logic, I'd write:
>  >
>  >    if (!func) return 0;
>  >    if (_fd_write == -1) return 0;
>  >
>  >    ...
>  >    pthread_mutex_lock(&_mutex);
>  >    do { ... } while ( ... )
>  >    pthread_mutex_unlock(&_mutex);
>  >
>  >  this would not do unneeded locks and avoid nested code.
>  >  Also, note that the function return "Evas_Bool" but in the version
>  >  without BUILD_ASYNC_EVENTS you return -1.
>  >
>  >
>  >  Aside these minor, mostly cosmetic, things, it's ready for inclusion :-)
>
>  Thanks a lot for taking the time to do the review. Here is a final
>  patch, and if nobody oppose, I will commit it during next week.

excellent, commit :-)

/me just waiting for the threaded image loading... ;-)

-- 
Gustavo Sverzut Barbieri
http://profusion.mobi
Embedded Systems
--------------------------------------
MSN: [EMAIL PROTECTED]
Skype: gsbarbieri
Mobile: +55 (81) 9927 0010

-------------------------------------------------------------------------
This SF.net email is sponsored by the 2008 JavaOne(SM) Conference 
Don't miss this year's exciting event. There's still time to save $100. 
Use priority code J8TL2D2. 
http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to