session: Make sr_session_stop thread-safe b4
authorAlexandru Gagniuc <mr.nuke.me@gmail.com>
Sat, 2 Feb 2013 06:50:00 +0000 (00:50 -0600)
committerAlexandru Gagniuc <mr.nuke.me@gmail.com>
Sat, 2 Feb 2013 07:01:41 +0000 (01:01 -0600)
commit0ce24da74bf1ca1e944589977cdff5ab841442f3
tree6ef20bc3fa4ae8bc1509b2aab4aed862f90fe155
parent20c31ea98c255b679de787618aff253b49850e4b
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 <mr.nuke.me@gmail.com>
libsigrok-internal.h
libsigrok.h
session.c