On 2017-09-22 12:38:32, Martin Pieuchot <m...@openbsd.org> wrote:
> On 20/09/17(Wed) 09:13, Anthony J. Bentley wrote:
> > Martin Pieuchot writes:
> > > Do you know if the games are multi-threaded?  Could you run "top -H" and
> > > "kdump -H"?
> > 
> > top -H shows a single line for gambatte.
> 
> Thanks.  Could you try the diff below?  It includes some debug stuff and
> a potential fix.
> 

I can confirm that this patch fixes dgen, mgba, and desmume for
me!  I assume that other SDL programs would be fixed as well.  I
encourage others to share their results.

FWIW, my dmesg is filled with things like the following (only the
last few lines pasted in):

   1 uhidread: got 7 chars
   1 uhidread
   1 uhidread: got 7 chars
   1 uhidread
   1 uhidread: got 7 chars
   1 uhidread
   1 uhidread: got 7 chars
   1 uhidread
   1 uhidread: got 7 chars
   1 uhidread
   1 uhidread: got 7 chars
   1 uhidread
   1 uhidread: got 7 chars
   1 uhidread
   1 uhidread: got 7 chars
   1 uhidread
   1 uhidread: got 7 chars
   1 uhidread
   1 uhidread: got 7 chars
   1 uhidread
   1 uhidread: got 7 chars
   1 uhidclose: sc=0xffff8000005cd000

> I'm guessing that the problem is that my last change made uhid_do_ioctl()
> return an error for FIOASYNC.  This makes the following syscall fall:
> 
> 390:  /* The poll blocks the event thread. */
> 391:  fcntl(fd, F_SETFL, O_NONBLOCK)
> 
> 
> As a result FNONBLOCK is not set on the 'struct file' and uhid_do_read()
> block, or "freeze", when there's nothing to read instead of returning
> EWOULDBLOCK.
> 
> 

Hmm, it's interesting to know how the solution was arrived at :)

Thank you very much for taking the time to look into this!

-- 
Bryan

Reply via email to