Il 28/08/2012 23:10, Holger Hans Peter Freyther ha scritto:
> Issue status update for http://smalltalk.gnu.org/project/issue/651
> Post a follow up: http://smalltalk.gnu.org/project/comments/add/651
> 
> Project:      GNU Smalltalk
> Version:      <none>
> Component:    VM
> Category:     bug reports
> Priority:     normal
> Assigned to:  Unassigned
> Reported by:  zecke
> Updated by:   zecke
> Status:       active
> 
> The 23:00 analysis... and hypothesis...
> 
> _gst_async_file_polling
> 1.) check for polling...
>                             2.) new data arrives
> 3.) re-alloc
> 4.) set_filter_interrupt...
> 
> It has been some time bit SIGIO/fasync is just edge triggered? isn't it?

Yes.  Does this fix it?

diff --git a/libgst/sysdep/posix/events.c b/libgst/sysdep/posix/events.c
index da3a784..8c864ec 100644
--- a/libgst/sysdep/posix/events.c
+++ b/libgst/sysdep/posix/events.c
@@ -395,6 +395,8 @@ _gst_async_file_polling (int fd,
   polling_queue *new;

   index = num_used_pollfds++;
+  set_file_interrupt (fd, file_polling_handler);
+
   result = _gst_sync_file_polling (fd, cond);
   if (result != 0)
     {
@@ -431,8 +433,6 @@ _gst_async_file_polling (int fd,
     }
   pollfds[index].revents = 0;

-  set_file_interrupt (fd, file_polling_handler);
-
   /* Even if I/O was made possible while setting up our machinery,
      the list will only be walked before the next bytecode, so there
      is no race.  We incremented num_used_pollfds very early so that

Paolo

_______________________________________________
help-smalltalk mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/help-smalltalk

Reply via email to