X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;f=session.c;h=440e3bd64970db1caab999e873b392f989f1b1d9;hb=df92e5cf6b1caad0d1d43eb890d84af1ef79cd18;hp=81e09b114dc59c44a2300dd85ad927329a7714ba;hpb=393fb9cb18c5746d8567c9cf74b872804043345a;p=libsigrok.git diff --git a/session.c b/session.c index 81e09b11..440e3bd6 100644 --- a/session.c +++ b/session.c @@ -271,6 +271,7 @@ SR_API int sr_session_start(void) sr_info("session: starting"); + ret = SR_OK; for (l = session->devs; l; l = l->next) { sdi = l->data; if ((ret = sdi->driver->dev_acquisition_start(sdi, sdi)) != SR_OK) { @@ -362,6 +363,15 @@ SR_API int sr_session_stop(void) } } + /* + * Some sources may not be necessarily associated with a device. + * Those sources may still be present even after stopping all devices. + * We need to make sure all sources are removed, or we risk running the + * session in an infinite loop. + */ + while (session->num_sources) + sr_session_source_remove(session->sources[0].poll_object); + return SR_OK; } @@ -370,10 +380,10 @@ SR_API int sr_session_stop(void) * * @param packet The packet to show debugging information for. */ -static void datafeed_dump(struct sr_datafeed_packet *packet) +static void datafeed_dump(const struct sr_datafeed_packet *packet) { - struct sr_datafeed_logic *logic; - struct sr_datafeed_analog *analog; + const struct sr_datafeed_logic *logic; + const struct sr_datafeed_analog *analog; switch (packet->type) { case SR_DF_HEADER: @@ -426,7 +436,7 @@ static void datafeed_dump(struct sr_datafeed_packet *packet) * @private */ SR_PRIV int sr_session_send(const struct sr_dev_inst *sdi, - struct sr_datafeed_packet *packet) + const struct sr_datafeed_packet *packet) { GSList *l; sr_datafeed_callback_t cb;