- g_io_channel_read_chars(channels[0], (gchar *)&c, BUFSIZE, &z, NULL);
+ do {
+ g_io_channel_read_chars(channels[0],
+ (gchar *)&c, BUFSIZE, &z, NULL);
+
+ if (z > 0) {
+ packet.type = SR_DF_LOGIC;
+ packet.length = z;
+ packet.unitsize = 1;
+ packet.payload = c;
+ sr_session_bus(user_data, &packet);
+ }
+ } while (z > 0);
+
+ if (!thread_running && z <= 0)
+ {
+ /* Make sure we don't receive more packets */
+ g_io_channel_close(channels[0]);