Date: Mon, 17 Jan 2005 00:39:05 +0300 (MSK) From: Igor Sysoev <is@rambler-co.ru> To: David Xu <davidxu@freebsd.org> Cc: freebsd-threads@freebsd.org Subject: Re: higher speed mutexes Message-ID: <20050117001919.B35122@is.park.rambler.ru> In-Reply-To: <41E318C2.3040304@freebsd.org> References: <41DCEA91.6040402@he.iki.fi> <41DCFD2F.2040207@freebsd.org> <41E0256A.1000801@he.iki.fi> <41E318C2.3040304@freebsd.org>
index | next in thread | previous in thread | raw e-mail
On Tue, 11 Jan 2005, David Xu wrote:
> Petri Helenius wrote:
>>
>> What happens if the process holding the lock dies?
>>
>>> In detail, I don't use thr_suspend and thr_wakeup, I use more reliable
>>> way:
>>> umtx_wait + umtx_wake, I have added them into kernel sometimes ago.
>>>
>> I was looking at the umtx routines and wondering if I could use them
>> instead of pthread API.
>>
> I will add owner list, when a thread blocked on umtx, an owner list
> will be created for the umtx, and blocked thread will lookup the owner
> in system, if there is no the owner, the owner was dead, kernel marks
> the umtx is in broken state, next locker will find the brokeness, and
> still gets the lock successfully but with errno is EPIPE, if a thread exits
> with its owner list not empty, in thr_exit, kernel will mark all umtxes
> to broken state, and wake up a waiter on each umtx, the waiter should
> find the brokeness...., it will let do priority proction and priority inherit
> mutex for POSIX..., I am looking for time to do it....
Is it possible to add the kqueue notification when a busy mutex will be freed ?
Something like
_umtx_op(umtx, UMTX_OP_EVENT_LOCK, id, kqueue, timeout);
If the mutex is free, UMTX_OP_EVENT_LOCK operate as UMTX_OP_LOCK.
But if the mutex is busy, UMTX_OP_EVENT_LOCK should register the mutex event
to the kqueue and return EBUSY (and so). When the mutex will be freed,
the application will received the EVFILT_UMTX event. However, kernel
should not lock the mutex that was just freed, but it should only notify about
freeing.
Igor Sysoev
http://sysoev.ru/en/
help
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20050117001919.B35122>
