PERFORCE change 229581 for review
Jonathan Anderson
jonathan at FreeBSD.org
Tue Jun 11 14:28:38 UTC 2013
http://p4web.freebsd.org/@@229581?ac=10
Change 229581 by jonathan at jonathan-on-joe on 2013/06/11 14:28:18
Update libtesla to most recent version.
This version ignores events that are out of scope, i.e. occur before an <<init>> event
or after a <<cleanup>> event.
Affected files ...
.. //depot/projects/ctsrd/tesla/src/sys/contrib/tesla/include/libtesla.h#4 edit
.. //depot/projects/ctsrd/tesla/src/sys/contrib/tesla/libtesla/tesla_dtrace.c#3 edit
.. //depot/projects/ctsrd/tesla/src/sys/contrib/tesla/libtesla/tesla_notification.c#3 edit
.. //depot/projects/ctsrd/tesla/src/sys/contrib/tesla/libtesla/tesla_update.c#2 edit
Differences ...
==== //depot/projects/ctsrd/tesla/src/sys/contrib/tesla/include/libtesla.h#4 (text+ko) ====
@@ -271,6 +271,10 @@
typedef void (*tesla_ev_accept)(struct tesla_class *,
struct tesla_instance *);
+/** An event is being ignored. */
+typedef void (*tesla_ev_ignored)(const struct tesla_class *,
+ const struct tesla_key *, const struct tesla_transitions *);
+
/** A vector of event handlers. */
struct tesla_event_handlers {
tesla_ev_new_instance teh_init;
@@ -279,6 +283,7 @@
tesla_ev_no_instance teh_fail_no_instance;
tesla_ev_bad_transition teh_bad_transition;
tesla_ev_accept teh_accept;
+ tesla_ev_ignored teh_ignored;
};
/** Register a set of event handlers. */
==== //depot/projects/ctsrd/tesla/src/sys/contrib/tesla/libtesla/tesla_dtrace.c#3 (text+ko) ====
@@ -54,6 +54,9 @@
"struct tesla_transitions *");
SDT_PROBE_DEFINE2(tesla, kernel, notify, accept, accept,
"struct tesla_class *", "struct tesla_instance *");
+SDT_PROBE_DEFINE3(tesla, kernel, notify, ignored, ignored-event,
+ "struct tesla_class *", "struct tesla_key *",
+ "struct tesla_transitions *");
static void
new_instance(struct tesla_class *tcp, struct tesla_instance *tip)
@@ -101,13 +104,22 @@
SDT_PROBE(tesla, kernel, notify, accept, tcp, tip, 0, 0, 0);
}
+static void
+ignored(struct tesla_class *tcp, const struct tesla_key *tkp,
+ const struct tesla_transitions *ttp)
+{
+
+ SDT_PROBE(tesla, kernel, notify, ignored, tcp, tkp, tip, 0, 0);
+}
+
struct tesla_event_handlers dtrace_handlers = {
.teh_init = new_instance,
.teh_transition = transition,
.teh_clone = clone,
.teh_fail_no_instance = no_instance,
.teh_bad_transition = bad_transition,
- .teh_accept = accept
+ .teh_accept = accept,
+ .teh_ignored = ignored,
};
#endif /* _KERNEL */
==== //depot/projects/ctsrd/tesla/src/sys/contrib/tesla/libtesla/tesla_notification.c#3 (text+ko) ====
@@ -41,7 +41,7 @@
if (!tehp || !tehp->teh_init || !tehp->teh_transition
|| !tehp->teh_clone || !tehp->teh_fail_no_instance
|| !tehp->teh_bad_transition
- || !tehp->teh_accept)
+ || !tehp->teh_accept || !tehp->teh_ignored)
return (TESLA_ERROR_EINVAL);
ev_handlers = tehp;
@@ -69,13 +69,17 @@
static void print_accept(struct tesla_class *, struct tesla_instance *);
+static void print_ignored(const struct tesla_class *,
+ const struct tesla_key *, const struct tesla_transitions *);
+
struct tesla_event_handlers printf_handlers = {
.teh_init = print_new_instance,
.teh_transition = print_transition_taken,
.teh_clone = print_clone,
.teh_fail_no_instance = print_no_instance,
.teh_bad_transition = print_bad_transition,
- .teh_accept = print_accept
+ .teh_accept = print_accept,
+ .teh_ignored = print_ignored,
};
@@ -94,7 +98,8 @@
.teh_clone = print_clone,
.teh_fail_no_instance = panic_no_instance,
.teh_bad_transition = panic_bad_transition,
- .teh_accept = print_accept
+ .teh_accept = print_accept,
+ .teh_ignored = print_ignored,
};
@@ -241,6 +246,21 @@
tip - tcp->tc_instances);
}
+void
+print_ignored(const struct tesla_class *tcp, const struct tesla_key *tkp,
+ const struct tesla_transitions *transp)
+{
+ char buffer[ERROR_BUFFER_LENGTH];
+ char *next = buffer;
+ const char *end = buffer + sizeof(buffer);
+
+ next = key_string(next, end, tkp);
+ SAFE_SPRINTF(next, end, " : ");
+ sprint_transitions(next, end, transp);
+
+ DEBUG(libtesla.event, "ignore '%s':%s", tcp->tc_name, buffer);
+}
+
static void
print_failure_header(const struct tesla_class *tcp)
==== //depot/projects/ctsrd/tesla/src/sys/contrib/tesla/libtesla/tesla_update.c#2 (text+ko) ====
@@ -175,6 +175,16 @@
}
}
+ if (!matched_something) {
+ // If the class hasn't received any <<init>> events yet,
+ // simply ignore the event: it is out of scope.
+ if (class->tc_free == class->tc_limit)
+ ev_handlers->teh_ignored(class, pattern, trans);
+
+ // Otherwise, we ought to have matched something.
+ else ev_handlers->teh_fail_no_instance(class, pattern, trans);
+ }
+
// Does it cause class cleanup?
if (cleanup_required)
tesla_class_reset(class);
@@ -182,9 +192,6 @@
print_class(class);
PRINT("\n====\n\n");
- if (!matched_something)
- ev_handlers->teh_fail_no_instance(class, pattern, trans);
-
tesla_class_put(class);
return (TESLA_SUCCESS);
More information about the p4-projects
mailing list