aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteven Rostedt <srostedt@redhat.com>2010-02-01 21:59:36 -0500
committerSteven Rostedt <rostedt@goodmis.org>2010-02-01 22:39:32 -0500
commit352e27b81bc706811e733dc77db29f77d3d45633 (patch)
treecbc427c9ec9311f00011eb85fdfff0e75c1afbc7
parent4a694d0f1f680a836835ac2294f95e075af7f1d7 (diff)
trace-cmd: Only enable filtering on the second call to enable_events
The enable_events is also used to update the filtering for the -F option. But it should not be doing the work of enabling events again. Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
-rw-r--r--trace-cmd.c33
1 files changed, 22 insertions, 11 deletions
diff --git a/trace-cmd.c b/trace-cmd.c
index f4b493d..4416995 100644
--- a/trace-cmd.c
+++ b/trace-cmd.c
@@ -492,7 +492,7 @@ static void write_filter(const char *file, const char *filter)
492 } 492 }
493} 493}
494 494
495static int enable_glob(const char *name, const char *filter) 495static int enable_glob(const char *name, const char *filter, int filter_only)
496{ 496{
497 glob_t globbuf; 497 glob_t globbuf;
498 FILE *fp; 498 FILE *fp;
@@ -532,6 +532,10 @@ static int enable_glob(const char *name, const char *filter)
532 else 532 else
533 write_filter(filter_file, "0"); 533 write_filter(filter_file, "0");
534 free(filter_file); 534 free(filter_file);
535 count++;
536
537 if (filter_only)
538 continue;
535 539
536 fp = fopen(path, "w"); 540 fp = fopen(path, "w");
537 if (!fp) 541 if (!fp)
@@ -540,8 +544,6 @@ static int enable_glob(const char *name, const char *filter)
540 fclose(fp); 544 fclose(fp);
541 if (ret < 0) 545 if (ret < 0)
542 die("writing to '%s'", path); 546 die("writing to '%s'", path);
543
544 count++;
545 } 547 }
546 globfree(&globbuf); 548 globfree(&globbuf);
547 return count; 549 return count;
@@ -570,7 +572,8 @@ static void filter_all_systems(const char *filter)
570 globfree(&globbuf); 572 globfree(&globbuf);
571} 573}
572 574
573static void enable_event(const char *name, const char *filter) 575static void enable_event(const char *name, const char *filter,
576 int filter_only)
574{ 577{
575 struct stat st; 578 struct stat st;
576 FILE *fp; 579 FILE *fp;
@@ -585,13 +588,16 @@ static void enable_event(const char *name, const char *filter)
585 path = get_tracing_file("events/enable"); 588 path = get_tracing_file("events/enable");
586 ret = stat(path, &st); 589 ret = stat(path, &st);
587 if (ret < 0) { 590 if (ret < 0) {
591 if (filter_only)
592 return;
588 put_tracing_file(path); 593 put_tracing_file(path);
589 /* old kernel */ 594 /* old kernel */
590 old_enable_events(name); 595 old_enable_events(name);
591 return; 596 return;
592 } 597 }
593 598
594 fprintf(stderr, "enable %s\n", name); 599 if (!filter_only)
600 fprintf(stderr, "enable %s\n", name);
595 601
596 /* We allow the user to use "all" to enable all events */ 602 /* We allow the user to use "all" to enable all events */
597 603
@@ -601,6 +607,11 @@ static void enable_event(const char *name, const char *filter)
601 else 607 else
602 filter_all_systems("0"); 608 filter_all_systems("0");
603 609
610 if (filter_only) {
611 put_tracing_file(path);
612 return;
613 }
614
604 fp = fopen(path, "w"); 615 fp = fopen(path, "w");
605 if (!fp) 616 if (!fp)
606 die("writing to '%s'", path); 617 die("writing to '%s'", path);
@@ -622,7 +633,7 @@ static void enable_event(const char *name, const char *filter)
622 str[len] = 0; 633 str[len] = 0;
623 ptr++; 634 ptr++;
624 if (!strlen(ptr) || strcmp(ptr, "*") == 0) { 635 if (!strlen(ptr) || strcmp(ptr, "*") == 0) {
625 ret = enable_glob(str, filter); 636 ret = enable_glob(str, filter, filter_only);
626 free(str); 637 free(str);
627 put_tracing_file(path); 638 put_tracing_file(path);
628 if (!ret) 639 if (!ret)
@@ -632,7 +643,7 @@ static void enable_event(const char *name, const char *filter)
632 643
633 str[len] = '/'; 644 str[len] = '/';
634 645
635 ret = enable_glob(str, filter); 646 ret = enable_glob(str, filter, filter_only);
636 free(str); 647 free(str);
637 if (!ret) 648 if (!ret)
638 die("No events enabled with %s", name); 649 die("No events enabled with %s", name);
@@ -640,12 +651,12 @@ static void enable_event(const char *name, const char *filter)
640 } 651 }
641 652
642 /* No ':' so enable all matching systems and events */ 653 /* No ':' so enable all matching systems and events */
643 ret = enable_glob(name, filter); 654 ret = enable_glob(name, filter, filter_only);
644 655
645 len = strlen(name) + strlen("*/") + 1; 656 len = strlen(name) + strlen("*/") + 1;
646 str = malloc_or_die(len); 657 str = malloc_or_die(len);
647 snprintf(str, len, "*/%s", name); 658 snprintf(str, len, "*/%s", name);
648 ret2 = enable_glob(str, filter); 659 ret2 = enable_glob(str, filter, filter_only);
649 free(str); 660 free(str);
650 661
651 if (!ret && !ret2) 662 if (!ret && !ret2)
@@ -773,7 +784,7 @@ static void update_pid_event_filters(char *pid)
773 strcat(event->filter, filter); 784 strcat(event->filter, filter);
774 } else 785 } else
775 event->filter = strdup(filter); 786 event->filter = strdup(filter);
776 enable_event(event->event, event->filter); 787 enable_event(event->event, event->filter, 1);
777 } 788 }
778 } 789 }
779 790
@@ -786,7 +797,7 @@ static void enable_events(void)
786 797
787 for (event = event_selection; event; event = event->next) { 798 for (event = event_selection; event; event = event->next) {
788 if (!event->neg) 799 if (!event->neg)
789 enable_event(event->event, event->filter); 800 enable_event(event->event, event->filter, 0);
790 } 801 }
791 802
792 /* Now disable any events */ 803 /* Now disable any events */