Fix: ctf: notif-iter: accept EOF at beginning of packet context with no PH
authorPhilippe Proulx <eeppeliteloop@gmail.com>
Sat, 16 Sep 2017 04:58:25 +0000 (00:58 -0400)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Sun, 17 Sep 2017 17:58:38 +0000 (13:58 -0400)
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
plugins/ctf/common/notif-iter/notif-iter.c

index 8bb79db8f3ba64980b5081fcd0066b9280dfa9f0..25d6c94a52ab4bb793dfb358b5d841e2bdf17197 100644 (file)
@@ -489,6 +489,8 @@ enum bt_ctf_notif_iter_status request_medium_bytes(
                BT_LOGV_MEM(buffer_addr, buffer_sz, "Returned bytes at %p:",
                        buffer_addr);
        } else if (m_status == BT_CTF_NOTIF_ITER_MEDIUM_STATUS_EOF) {
+               struct bt_ctf_field_type *ph_ft =
+                       bt_ctf_trace_get_packet_header_type(notit->meta.trace);
                struct bt_ctf_field_type *eh_ft = NULL;
                struct bt_ctf_field_type *sec_ft = NULL;
                struct bt_ctf_field_type *ec_ft = NULL;
@@ -507,6 +509,16 @@ enum bt_ctf_notif_iter_status request_medium_bytes(
                        goto bad_state;
                }
 
+               if (notit->state == STATE_DSCOPE_STREAM_PACKET_CONTEXT_BEGIN) {
+                       /*
+                        * Beginning of packet context context is only
+                        * valid if there's no packet header.
+                        */
+                       if (!ph_ft) {
+                               goto good_state;
+                       }
+               }
+
                eh_ft = bt_ctf_stream_class_get_event_header_type(
                        notit->meta.stream_class);
                sec_ft = bt_ctf_stream_class_get_event_context_type(
@@ -580,6 +592,7 @@ bad_state:
                m_status = BT_CTF_NOTIF_ITER_MEDIUM_STATUS_ERROR;
 
 good_state:
+               bt_put(ph_ft);
                bt_put(eh_ft);
                bt_put(sec_ft);
                bt_put(ec_ft);
This page took 0.027327 seconds and 4 git commands to generate.