X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;f=session.c;h=973fd15231250e04b18e233c43cbaf84a2818a25;hb=4c961f5ed5e127aae75e48cd4369dc25439f24d4;hp=0d4c13f725c14681b684f86d5aae0ebaa062065e;hpb=6b2d8d3e5c4762cdafd847f9613d3f7b855927ab;p=libsigrok.git diff --git a/session.c b/session.c index 0d4c13f7..973fd152 100644 --- a/session.c +++ b/session.c @@ -25,6 +25,12 @@ #include "libsigrok.h" #include "libsigrok-internal.h" +/** + * @file + * + * Creating, using, or destroying libsigrok sessions. + */ + /** * @defgroup grp_session Session handling * @@ -265,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) { @@ -356,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; } @@ -364,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: @@ -376,20 +392,15 @@ static void datafeed_dump(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: @@ -420,7 +431,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;