[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Usage of Semaphore with a workqueue
Hi michi and peter, Nice discussion.
On Fri, Apr 3, 2009 at 10:09 PM, Michael Blizek
<michi1@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx> wrote:
> Hi!
>
> On 14:45 Fri 03 Apr , Peter Teoh wrote:
>> Er....yes, i understand what u are saying.....but then I am lost over
>> your original question.
>>
>> Can you re-explain your original question again? Now I don't quite understand.
>
> Devesh wanted to do trylock of a semaphore inside a workqueue and return
> ERESTARTSYS if locking fails. There are some things which are wrong with
> this approach.
>
> 1) Mutexes should be prefered over semaphores, if possible. If it is not
> possible, it might be a case which is not well suited for a workqueue. e.g.
> you can create a request queue and use a semaphore for counting the number of
> requests in the queue and sleeping if there are no requests until one arrives.
>
> 2) I have never used trylock and I still do not know what he wants to do with
> it.
I am just trying to understand trylock APIs and analysing the
differences b/w the _interruptible and trylock..
>
> 3) ERESTARTSYS is for use with the _interruptable functions of mutex_lock
> and others. It makes only sense inside system calls, because its purpose is
> to exit the system call prematurely in order to let a signal be delivered to
> the user space process. The system call will then fail with errno set to
> EINTR.
> 3.1) Returning ERESTARTSYS in a workqueue will not not work. The workqueue
> function has to return void, so the return code will get lost.
> 3.2) Returning ERESTARTSYS is only valid for the _interruptable functions if
> a signal is pending. Returning it after trylock if something is currently
> locked will not work (why would you want to do this anyway?).
Ohh......its this way!! I was in an impression that...if ERESTARTSYS
is returned, _anyhow_ (I mean independent of _interruptible or
trylock), the execution context (system call)
will restart. That is why I was thinking, that one can return
ERESTARTSYS even with trylock..:(
Are you saying that using ERESTARTSYS is worthless with trylock? Can
you clarify "Is only valid for the _interruptable" if its returned
even with trylock then will functioning of ERESTARTSYS will be droped?
or its inherent prperty of implementation to by-pass the functioning?
>
> -Michi
> --
> programing a layer 3+4 network protocol for mesh networks
> see http://michaelblizek.twilightparadox.com
>
>
--
To unsubscribe from this list: send an email with
"unsubscribe kernelnewbies" to ecartis@xxxxxxxxxxxx
Please read the FAQ at http://kernelnewbies.org/FAQ