On 237, 08 24, 2004 at 07:58:05PM +0300, Timo Sirainen wrote:
On 24.8.2004, at 14:05, Andrey Panin wrote:
I guess it could be simply changed to use reference counting instead of the delayed destroying. Hmm. Looks like ioloop code could use several optimizations..
Reference counting... Hmm, I thinked about replacing ioloop->ios single linked list with doubly linked list, it should make removal of io entries easy and loop in the io_add() function can be removed too.
Actually now I remember the real problem why I did delayed destroying. Because io_remove() may remove any one of the io structures and it can be called inside the io callback, it wasn't possible to know what the next valid io structure would be because the current and next ones might have been freed already.
Anyway, simple to fix. Keep the next io pointer in ioloop struct and if io_remove() wants to free it, it updates the next pointer.
Doubly linked lists would be good too.
Ok. Another question: epoll_wait() reports events in order of arrival and so io callbacks will be called in this order, not in order of ioloop->ios list. Is this difference significant ?
-- Andrey Panin | Linux and UNIX system administrator pazke@donpac.ru | PGP key: wwwkeys.pgp.net