X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;f=session.c;h=973fd15231250e04b18e233c43cbaf84a2818a25;hb=cbc6f3b25331bc4acca1eff9a5e60786e2efd2f8;hp=6a4a3c99704b4e2c5f371911594c685a9417ed06;hpb=bf53457d1ddea58d1cb7e4feea83ad0cc1d63031;p=libsigrok.git diff --git a/session.c b/session.c index 6a4a3c99..973fd152 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; } @@ -382,20 +392,15 @@ static void datafeed_dump(const struct sr_datafeed_packet *packet) case SR_DF_TRIGGER: sr_dbg("bus: received SR_DF_TRIGGER"); break; - case SR_DF_META_LOGIC: - sr_dbg("bus: received SR_DF_META_LOGIC"); + case SR_DF_META: + sr_dbg("bus: received SR_DF_META"); break; case SR_DF_LOGIC: logic = packet->payload; - /* TODO: Check for logic != NULL. */ sr_dbg("bus: received SR_DF_LOGIC %" PRIu64 " bytes", logic->length); break; - case SR_DF_META_ANALOG: - sr_dbg("bus: received SR_DF_META_ANALOG"); - break; case SR_DF_ANALOG: analog = packet->payload; - /* TODO: Check for analog != NULL. */ sr_dbg("bus: received SR_DF_ANALOG %d samples", analog->num_samples); break; case SR_DF_END: