Patch 8/8 will be replaced by a v2 (upcoming).

----- Original Message -----
> From: "Mathieu Desnoyers" <[email protected]>
> To: [email protected]
> Cc: [email protected]
> Sent: Wednesday, November 19, 2014 11:45:59 PM
> Subject: Re: [lttng-dev] [PATCH lttng-tools 8/8] Fix: add missing 
> synchronization point for before app test case
> 
> ----- Original Message -----
> > From: "Mathieu Desnoyers" <[email protected]>
> > To: [email protected]
> > Cc: [email protected], "Mathieu Desnoyers"
> > <[email protected]>
> > Sent: Wednesday, November 19, 2014 10:40:32 PM
> > Subject: [PATCH lttng-tools 8/8] Fix: add missing synchronization point for
> > before app test case
> > 
> > Fixes a race where the application could generate all its events before
> > trace start.
> > 
> > Signed-off-by: Mathieu Desnoyers <[email protected]>
> > ---
> [...]
> > b/tests/utils/testapp/gen-ust-events/gen-ust-events.c
> > index 42fa082..60f1c6f 100644
> > --- a/tests/utils/testapp/gen-ust-events/gen-ust-events.c
> > +++ b/tests/utils/testapp/gen-ust-events/gen-ust-events.c
> > @@ -15,6 +15,7 @@
> >   * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
> >   */
> >  
> > +#define _GNU_SOURCE
> >  #include <assert.h>
> >  #include <arpa/inet.h>
> >  #include <fcntl.h>
> > @@ -27,15 +28,21 @@
> >  #include <sys/types.h>
> >  #include <unistd.h>
> >  #include <stdbool.h>
> > +#include <signal.h>
> > +#include <poll.h>
> > +#include <errno.h>
> >  
> >  #define TRACEPOINT_DEFINE
> >  #include "tp.h"
> >  
> >  void create_file(const char *path)
> >  {
> > +   static bool file_created = false;
> >     int ret;
> >  
> > -   assert(path);
> > +   if (!path || file_created) {
> > +           return;
> > +   }
> >  
> >     ret = creat(path, S_IRWXU);
> >     if (ret < 0) {
> > @@ -44,6 +51,30 @@ void create_file(const char *path)
> >     }
> >  
> >     (void) close(ret);
> > +   file_created = true;
> > +}
> > +
> > +static
> > +void wait_on_file(const char *path)
> > +{
> > +   if (!path) {
> > +           return;
> > +   }
> > +   for (;;) {
> > +           int ret;
> > +           struct stat buf;
> > +
> > +           ret = stat(path, &buf);
> > +           if (ret == -1 && errno == ENOENT) {
> > +                   (void) poll(NULL, 0, 10);       /* 10 ms delay */
> > +                   continue;                       /* retry */
> > +           }
> > +           if (ret) {
> > +                   perror("stat");
> > +                   exit(EXIT_FAILURE);
> > +           }
> > +           break;  /* found */
> > +   }
> >  }
> >  
> >  int main(int argc, char **argv)
> > @@ -55,8 +86,8 @@ int main(int argc, char **argv)
> >     float flt = 2222.0;
> >     int nr_iter = 100;
> >     useconds_t nr_usec = 0;
> > -   char *tmp_file_path = NULL;
> > -   bool file_created = false;
> > +   char *after_first_event_file_path = NULL;
> > +   char *before_last_event_file_path = NULL;
> >  
> >     if (argc >= 2) {
> >             /*
> > @@ -71,22 +102,30 @@ int main(int argc, char **argv)
> >     }
> >  
> >     if (argc >= 4) {
> > -           tmp_file_path = argv[3];
> > +           after_first_event_file_path = argv[3];
> > +   }
> > +
> > +   if (argc >= 5) {
> > +           before_last_event_file_path = argv[4];
> >     }
> >  
> >     for (i = 0; nr_iter < 0 || i < nr_iter; i++) {
> > +           if (nr_iter >= 0 && i == nr_iter) {
> 
> This should be if (nr_iter >= 0 && i == nr_iter - 1)
> 
> Thanks,
> 
> Mathieu
> 
> > +                   /*
> > +                    * Wait on synchronization before writing last
> > +                    * event.
> > +                    */
> > +                   wait_on_file(before_last_event_file_path);
> > +           }
> >             netint = htonl(i);
> > -           tracepoint(tp, tptest, i, netint, values, text, strlen(text), 
> > dbl,
> > -                           flt);
> > +           tracepoint(tp, tptest, i, netint, values, text,
> > +                   strlen(text), dbl, flt);
> >  
> >             /*
> > -            * First loop we create the file if asked to indicate that at 
> > least one
> > -            * tracepoint has been hit.
> > +            * First loop we create the file if asked to indicate
> > +            * that at least one tracepoint has been hit.
> >              */
> > -           if (!file_created && tmp_file_path) {
> > -                   create_file(tmp_file_path);
> > -                   file_created = true;
> > -           }
> > +           create_file(after_first_event_file_path);
> >             usleep(nr_usec);
> >     }
> >  
> > --
> > 2.1.1
> > 
> > 
> 
> --
> Mathieu Desnoyers
> EfficiOS Inc.
> http://www.efficios.com
> 
> _______________________________________________
> lttng-dev mailing list
> [email protected]
> http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev
> 

-- 
Mathieu Desnoyers
EfficiOS Inc.
http://www.efficios.com

_______________________________________________
lttng-dev mailing list
[email protected]
http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev

Reply via email to