Alexander Larsson wrote: > On Wed, 2007-09-12 at 13:10 +0200, nf2 wrote: > >> Alexander Larsson wrote: >> >> >>> You don't need a session object for that. Other solutions is to pass it >>> in the context to each async operation, or to have a thread-local >>> setting for the main loop to use. >>> >>> However, currently this is not supported, as it doesn't seem very common >>> to use async i/o in a separate thread. UI apps use async i/o mainly to >>> avoid blocking the main thread, and rarely on threads, so we decided to >>> not support it. (Well, you can initiate async i/o on a thread, but the >>> callback will be on the main thread.) We do however support using sync >>> i/o on threads. >>> >>> >> and what about the gvfs dbus connections? they also need a session >> object to live in. even for sync io in a separate thread: can you use >> the same dbus connections like in the main thread? >> > > What about it? It works fine. With the current system there is a single > one for async i/o, and per-thread ones for sync i/o. One could add > per-thread ones for async i/o (it had that once, but I removed it). >
i see. so you have a per-thread pool of dbus connections? > There is really no sane way to share connections between threads, as > only one thread can be reading the messages. > > >> i just believe that a standard file-management api like gio should not >> do things like storing state in global variables or depend on a default >> main loop context. it should support "not so common" uses cases. it's ok >> to have a convenience api which initializes a default session object, >> but i think there should be another "professional" api behind that... >> > > I don't agree. I think nobody would use this, and there will be more > than one horribly complicated bug caused by it. Can you come up with an > sane example usecase where you want to do async i/o in a worker thread? > i think there are situations where a second gmain context is useful: using async operations which recurse the mainloop (pseudo blocking) in a thread - for instance for downloading a complete file like KIO::NetAccess. or using a library with async design (internally using gio) in a thread. in my libfusi i use a second gmain context to "synchronize" a sub-system which has been designed in an async way - to block the GUI context (actually to be able to provide a synchronous and async mount operation, relying on the same async code). btw, i also found it annoying that GIOChannels only operate on the default context. > Async I/O is typically used to avoid using threads (although it is often > implemented using threads). Combining async i/o and threads sounds like > a horrendous idea. You get the worst of both. All the locking issues > with threads, and the hard-to-use aspects of async i/o. > > really? you could have two threads communicating with idle sources for instance. however - i guess for 90% of the use cases you are right. i just thought that a universal file io-library, which competes with open, opendir and stat should be quite low-level and not make decisions about the default context or the main thread (KIO and Gnome-VFS have been designed too high level - and that's IMHO their crucial mistake). i believe it's good that glib allows to have different gmain contexts and doesn't use global variables extensively. i would expect that a file-io interface which comes with glib is fitting into this model. norbert _______________________________________________ gnome-vfs-list mailing list gnome-vfs-list@gnome.org http://mail.gnome.org/mailman/listinfo/gnome-vfs-list