]> sigrok.org Git - libsigrok.git/commit
session: Make sr_session_stop thread-safe
authorAlexandru Gagniuc <redacted>
Sat, 2 Feb 2013 06:50:00 +0000 (00:50 -0600)
committerBert Vermeulen <redacted>
Sun, 14 Apr 2013 21:39:15 +0000 (23:39 +0200)
commit33c6e4c5a428115965f980e88e6415fb782658e9
treeb1357d6d789585c4adfa1c57b899ba00735384b9
parent33ef757383896959651c48744fabb417729424dc
session: Make sr_session_stop thread-safe

With the sigrok session running in a worker thread, if sr_session_stop is called
from another thread, it shuts down the pollfds used by the hardware drivers,
without ensuring that the sigrok event loop is no longer using those pollfds.

On the demo driver, this involves shutting down the GIOChannels, causing a
segfault when the sigrok event loop tries to use them. This is evident when
using the Stop button in PulseView, while the session is running.

This isn't a problem with just the demo driver; any driver's resources may be
freed by sr_session_stop concurrently with the sigrok session running.

To solve this problem, we don't touch the session itself in sr_session_stop().
Instead, we mark it for decommissioning and return. The session polls this flag,
and shuts itself down when requested.

This fixes bug 4.

Signed-off-by: Alexandru Gagniuc <redacted>
libsigrok-internal.h
libsigrok.h
session.c