]> sigrok.org Git - libsigrok.git/blobdiff - session.c
hantek-dso: Use message logging helpers.
[libsigrok.git] / session.c
index 6a4a3c99704b4e2c5f371911594c685a9417ed06..973fd15231250e04b18e233c43cbaf84a2818a25 100644 (file)
--- 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: