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 *)¤t) + 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
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel