On Thu, 2009-06-18 at 08:27 -0400, Dan Winship wrote:
> > If anyone wants to replicate this, then the code is in
> > git://git.moblin.org/librest. You'll need the ross/threaded branch, and
> > the test case is tests/threaded.
>
> Bug in the test case. :)
Well that makes it easier to fix!
> The problem is that you're running the server in a thread, which causes
> the default main loop to be run in that thread, which causes all ORBit
> I/O to be run in that thread. This would be fine *except* that you never
> stop the server thread, and ORBit registers an atexit() handler, which
> will get run in the main thread, and so when the program exits, it may
> end up performing ORBit ops in two threads at once, which ORBit isn't
> set up to deal with. So you need to rewrite it to either exit the server
> thread before exiting main(), or else run the server from the main
> thread. (Or else run the server with its own GMainContext, which will
> mean no one is running the default main loop, and so the initial gconf
> stuff will just happen in whatever thread calls it first, and then there
> won't be any updates to it after that, which isn't really a problem in a
> program like this.)
Okay, I've just added soup_server_quit(server) after I've joined all of
the client threads, and the test certainly runs for longer now.
> PS - also, you should say "127.0.0.1", not "localhost", in the URL,
> because SoupServer only listens on IPv4 (by default), but "localhost"
> may resolve to ::1 instead, causing the test to fail for the wrong reason.
Good point, fixed.
Thanks,
Ross
--
Ross Burton mail: ross burtonini com
jabber: ross burtonini com
www: http://burtonini.com
Attachment:
signature.asc
Description: This is a digitally signed message part