From: Philippe Gerum <rpm@xenomai.org>
To: Matthias Schneider <ma30002000@yahoo.de>,
"xenomai@xenomai.org" <xenomai@xenomai.org>
Subject: Re: [Xenomai] Issue in notifier_callback while threadobj_lock is being held (forge/mercury)
Date: Sat, 26 Apr 2014 12:32:35 +0200 [thread overview]
Message-ID: <535B8B43.1000109@xenomai.org> (raw)
In-Reply-To: <1398502711.53016.YahooMailNeo@web171601.mail.ir2.yahoo.com>
On 04/26/2014 10:58 AM, Matthias Schneider wrote:
> Hi all,
>
> when threadobj_lock is being held and a thread suspension triggers a call of
> notifier_callback, I am experiencing some issues. The scenario in my case
> was a thread being started waiting on threadobj_wait_start()/wait_on_barrier()
> while a thread suspension was already triggered. (In case the started thread is
> of lower priority than the starting thread, threadobj_start() will not wait
> for it).
>
> The problem I was experiencing (due to timing) was that threadobj_lock()
> was called in notifier_callback(), failed because the mutex was already held
> (by wait_on_barrier()) and thus did not set the threadobj->status variable,
> however, wait_on_barrier() had already unset the status variable before actually
> unlocking the mutex in pthread_cond_wait().
>
> This caused threadobj_lock() in notifier_callback() return -EDEADLK and not
> doing anything, and threadobj_unlock() to assert on __threadobj_tag_unlocked(thobj)
> due status not reflecting the locked state.
>
> Additionally I see problems in notifier_callback() in general since it will
> leave the threadobj unlocked on return regardless of its previos state.
> I am not sure how to address this issue, I have helped myself by blocking
> SIGNOTIFY in wait_on_barrier(), but that is obviously an incomplete fix
> (if it is any at all). Probably there are other situtions as well that could
> cause this behavior.
>
> Any ideas on what to do about that?
There is a single sane option: no code running on top of the SIGNOTIFY
handler should attempt to grab any lock. notifier_callback() is simply
wrong in acquiring a lock, only to set the suspend bit in the status.
There is a better option for reflecting the current state locklessly.
I'll issue a fix.
--
Philippe.
next prev parent reply other threads:[~2014-04-26 10:32 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-04-26 8:58 [Xenomai] Issue in notifier_callback while threadobj_lock is being held (forge/mercury) Matthias Schneider
2014-04-26 10:32 ` Philippe Gerum [this message]
2014-04-26 16:13 ` Philippe Gerum
2014-05-01 11:49 ` Matthias Schneider
2014-05-01 12:52 ` Philippe Gerum
2014-05-01 13:00 ` Philippe Gerum
2014-05-01 14:28 ` Matthias Schneider
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=535B8B43.1000109@xenomai.org \
--to=rpm@xenomai.org \
--cc=ma30002000@yahoo.de \
--cc=xenomai@xenomai.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.