ust_fork(): reset buffers_to_export to 0 when forking
[ust.git] / libust / tracectl.c
index c34a3ce4ad3f673393ef3df9da5f89baa965d7e8..220d37f6f0bb347b22587c98bbcee6ee6e0857cf 100644 (file)
@@ -357,10 +357,7 @@ static int do_cmd_get_shmid(const char *recvbuf, struct ustcomm_source *src)
                }
        }
 
-       if(found) {
-               buffers_to_export--;
-       }
-       else {
+       if(!found) {
                ERR("channel not found (%s)", channel_and_cpu);
        }
 
@@ -695,6 +692,14 @@ static int do_cmd_get_subbuffer(const char *recvbuf, struct ustcomm_source *src)
 
                        list_add(&bc->list, &blocked_consumers);
 
+                       /* Being here is the proof the daemon has mapped the buffer in its
+                        * memory. We may now decrement buffers_to_export.
+                        */
+                       if(atomic_long_read(&buf->consumed) == 0) {
+                               DBG("decrementing buffers_to_export");
+                               buffers_to_export--;
+                       }
+
                        break;
                }
        }
@@ -1473,6 +1478,7 @@ static void ust_fork(void)
                list_del(&bc->list);
        }
 
+       buffers_to_export = 0;
        have_listener = 0;
        init_socket();
        create_listener();
This page took 0.023077 seconds and 4 git commands to generate.