From owner-p4-projects@FreeBSD.ORG Wed Oct 9 19:34:26 2013 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 590C83FD; Wed, 9 Oct 2013 19:34:26 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 1A1CF3FB for ; Wed, 9 Oct 2013 19:34:26 +0000 (UTC) (envelope-from jonathan@freebsd.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [8.8.178.74]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 05A0C2FE1 for ; Wed, 9 Oct 2013 19:34:26 +0000 (UTC) Received: from skunkworks.freebsd.org ([127.0.1.74]) by skunkworks.freebsd.org (8.14.7/8.14.7) with ESMTP id r99JYPEE042635 for ; Wed, 9 Oct 2013 19:34:25 GMT (envelope-from jonathan@freebsd.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.7/8.14.6/Submit) id r99JYPwZ042632 for perforce@freebsd.org; Wed, 9 Oct 2013 19:34:25 GMT (envelope-from jonathan@freebsd.org) Date: Wed, 9 Oct 2013 19:34:25 GMT Message-Id: <201310091934.r99JYPwZ042632@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to jonathan@freebsd.org using -f From: Jonathan Anderson Subject: PERFORCE change 1023081 for review To: Perforce Change Reviews Precedence: bulk X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.14 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 09 Oct 2013 19:34:26 -0000 http://p4web.freebsd.org/@@1023081?ac=10 Change 1023081 by jonathan@jonathan-on-joe on 2013/10/09 19:33:30 Sync latest 'master' branch from GitHub. This does *not* include all of the latest refactoring and sunrise/sunset work. Affected files ... .. //depot/projects/ctsrd/tesla/src/sys/contrib/tesla/libtesla/tesla_class.c#10 edit .. //depot/projects/ctsrd/tesla/src/sys/contrib/tesla/libtesla/tesla_debug.c#8 edit .. //depot/projects/ctsrd/tesla/src/sys/contrib/tesla/libtesla/tesla_dtrace.c#11 edit .. //depot/projects/ctsrd/tesla/src/sys/contrib/tesla/libtesla/tesla_internal.h#14 edit .. //depot/projects/ctsrd/tesla/src/sys/contrib/tesla/libtesla/tesla_notification.c#18 edit Differences ... ==== //depot/projects/ctsrd/tesla/src/sys/contrib/tesla/libtesla/tesla_class.c#10 (text+ko) ==== @@ -151,7 +151,7 @@ return (TESLA_SUCCESS); } - tesla_assert(0, ("no free instances but tc_free was > 0")); + tesla_assert(0 && ("no free instances but tc_free was > 0")); return (TESLA_ERROR_ENOMEM); } ==== //depot/projects/ctsrd/tesla/src/sys/contrib/tesla/libtesla/tesla_debug.c#8 (text+ko) ==== @@ -208,7 +208,7 @@ tesla_assert(instance_belongs_to_class, ("tesla_instance %x not of class '%s'", - instance, tclass->tc_automaton->ta_name) + instance, tclass->tc_name) ); } ==== //depot/projects/ctsrd/tesla/src/sys/contrib/tesla/libtesla/tesla_dtrace.c#11 (text+ko) ==== @@ -40,31 +40,26 @@ SDT_PROBE_DEFINE2(tesla, automata, instance, create, create, "struct tesla_class *", "struct tesla_instance *"); - SDT_PROBE_DEFINE3(tesla, automata, event, transition, state-transition, "struct tesla_class *", "struct tesla_instance *", "struct tesla_transition *"); - SDT_PROBE_DEFINE4(tesla, automata, instance, clone, clone, "struct tesla_class *", "struct tesla_instance *", "struct tesla_instance *", "struct tesla_transition *"); - SDT_PROBE_DEFINE4(tesla, automata, fail, no_instance, no-instance-match, - "struct tesla_class *", "const char *", "const char *", "int32_t"); - + "struct tesla_class *", "const char *", "const char *", + "struct tesla_transitions *"); SDT_PROBE_DEFINE3(tesla, automata, fail, bad_transition, bad-transition, - "struct tesla_class *", "struct tesla_instance *", "int32_t"); - -SDT_PROBE_DEFINE4(tesla, automata, fail, other_err, other-error, - "struct tesla_automaton *", "int32_t", "int32_t", "const char *"); - + "struct tesla_class *", "struct tesla_instance *", + "struct tesla_transitions *"); +SDT_PROBE_DEFINE3(tesla, automata, fail, other_err, other-error, + "struct tesla_class *", "int", "const char *"); SDT_PROBE_DEFINE2(tesla, automata, success, accept, accept, "struct tesla_class *", "struct tesla_instance *"); - SDT_PROBE_DEFINE3(tesla, automata, event, ignored, ignored-event, - "struct tesla_class *", "int32_t", "struct tesla_key *"); + "struct tesla_class *", "struct tesla_key *", + "struct tesla_transitions *"); - static void new_instance(struct tesla_class *tcp, struct tesla_instance *tip) { @@ -89,8 +84,8 @@ } static void -no_instance(struct tesla_class *tcp, int32_t symbol, - const struct tesla_key *tkp) +no_instance(struct tesla_class *tcp, const struct tesla_key *tkp, + const struct tesla_transitions *ttp) { char instbuf[200]; char *c = instbuf; @@ -113,25 +108,22 @@ key_string(keybuf, keybuf + sizeof(keybuf), tkp); SDT_PROBE(tesla, automata, fail, no_instance, - tcp, instbuf, keybuf, symbol, 0); + tcp, instbuf, keybuf, ttp, 0); } static void bad_transition(struct tesla_class *tcp, struct tesla_instance *tip, - int32_t symbol) + const struct tesla_transitions *ttp) { - SDT_PROBE(tesla, automata, fail, bad_transition, - tcp, tip, symbol, 0, 0); + SDT_PROBE(tesla, automata, fail, bad_transition, tcp, tip, ttp, 0, 0); } static void -err(const struct tesla_automaton * tcp, int32_t symbol, int32_t errno, - const char *message) +err(struct tesla_class *tcp, int errnum, const char *message) { - SDT_PROBE(tesla, automata, fail, other_err, - tcp, symbol, errno, message, 0); + SDT_PROBE(tesla, automata, fail, other_err, tcp, errnum, message, 0, 0); } static void @@ -142,11 +134,11 @@ } static void -ignored(const struct tesla_class *tcp, - int32_t symbol, const struct tesla_key *tkp) +ignored(const struct tesla_class *tcp, const struct tesla_key *tkp, + const struct tesla_transitions *ttp) { - SDT_PROBE(tesla, automata, event, ignored, tcp, symbol, tkp, 0, 0); + SDT_PROBE(tesla, automata, event, ignored, tcp, tkp, ttp, 0, 0); } const struct tesla_event_handlers dtrace_handlers = { ==== //depot/projects/ctsrd/tesla/src/sys/contrib/tesla/libtesla/tesla_internal.h#14 (text+ko) ==== @@ -82,7 +82,7 @@ /** * Call this if things go catastrophically, unrecoverably wrong. */ -void tesla_die(int32_t errno, const char *event) __attribute__((noreturn)); +void tesla_die(int32_t errnum, const char *event) __attribute__((noreturn)); /** * Reset all automata in a store to the inactive state. @@ -256,12 +256,13 @@ struct tesla_instance *tc_instances; /* Instances of this class. */ #ifdef _KERNEL - struct mtx tc_lock; /* Synchronise tc_table. */ + struct mtx tc_lock; /* Synchronise tc_table. */ #else pthread_mutex_t tc_lock; /* Synchronise tc_table. */ #endif }; +typedef struct tesla_automaton tesla_automaton; typedef struct tesla_class tesla_class; typedef struct tesla_instance tesla_instance; typedef struct tesla_key tesla_key; @@ -341,7 +342,7 @@ const struct tesla_key *); void ev_bad_transition(struct tesla_class *, struct tesla_instance *, int32_t symbol); -void ev_err(const struct tesla_automaton *, int symbol, int errno, +void ev_err(const struct tesla_automaton *, int symbol, int errnum, const char *); void ev_accept(struct tesla_class *, struct tesla_instance *); void ev_ignored(const struct tesla_class *, int32_t symbol, ==== //depot/projects/ctsrd/tesla/src/sys/contrib/tesla/libtesla/tesla_notification.c#18 (text+ko) ==== @@ -159,11 +159,11 @@ } void -ev_err(const struct tesla_automaton *a, int symbol, int errno, +ev_err(const struct tesla_automaton *a, int symbol, int errnum, const char *message) { - FOREACH_ERROR_HANDLER(teh_err, a, symbol, errno, message); + FOREACH_ERROR_HANDLER(teh_err, a, symbol, errnum, message); } void @@ -204,8 +204,9 @@ print_new_instance(struct tesla_class *tcp, struct tesla_instance *tip) { - DEBUG(libtesla.instance.new, "new %td: %d\n", - tip - tcp->tc_instances, tip->ti_state); + DEBUG(libtesla.instance.new, "new %td: %d:0x%x ('%s')\n", + tip - tcp->tc_instances, tip->ti_state, tip->ti_key.tk_mask, + tcp->tc_automaton->ta_name); } static void @@ -213,8 +214,10 @@ struct tesla_instance *tip, const struct tesla_transition *transp) { - DEBUG(libtesla.state.transition, "update %td: %d->%d\n", - tip - tcp->tc_instances, transp->from, transp->to); + DEBUG(libtesla.state.transition, "update %td: %d:0x%x->%d:0x%x\n", + tip - tcp->tc_instances, + transp->from, transp->from_mask, + transp->to, transp->to_mask); } static void @@ -223,9 +226,11 @@ const struct tesla_transition *transp) { - DEBUG(libtesla.instance.clone, "clone %td:%d -> %td:%d\n", - old_instance - tcp->tc_instances, transp->from, - new_instance - tcp->tc_instances, transp->to); + DEBUG(libtesla.instance.clone, "clone %td:%d:0x%x -> %td:%d:0x%x\n", + old_instance - tcp->tc_instances, + transp->from, transp->from_mask, + new_instance - tcp->tc_instances, + transp->to, transp->to_mask); } static void @@ -262,8 +267,8 @@ assert(tcp != NULL); assert(tip != NULL); - const tesla_transitions *transp - = tcp->tc_automaton->ta_transitions + symbol; + const tesla_automaton *autom = tcp->tc_automaton; + const tesla_transitions *transp = autom->ta_transitions + symbol; print_failure_header(tcp); @@ -273,24 +278,29 @@ SAFE_SPRINTF(next, end, "Instance %td is in state %d\n" - "but required to take a transition in ", - (tip - tcp->tc_instances), tip->ti_state); + "but received event '%s'\n" + "(causes transition in: ", + (tip - tcp->tc_instances), tip->ti_state, + autom->ta_symbol_names[symbol]); assert(next > buffer); next = sprint_transitions(next, end, transp); assert(next > buffer); + SAFE_SPRINTF(next, end, ")\n"); + assert(next > buffer); + error("%s", buffer); } static void -print_error(const struct tesla_automaton *a, int symbol, int errno, +print_error(const struct tesla_automaton *a, int symbol, int errnum, const char *message) { DEBUG(libtesla.event, "%s in '%s' %s: %s\n", message, a->ta_name, a->ta_symbol_names[symbol], - tesla_strerror(errno)); + tesla_strerror(errnum)); } static void @@ -359,13 +369,13 @@ } static void -panic_error(const struct tesla_automaton *a, int symbol, int errno, +panic_error(const struct tesla_automaton *a, int symbol, int errnum, const char *message) { tesla_panic("TESLA: %s in '%s' %s: %s", message, a->ta_name, a->ta_symbol_names[symbol], - tesla_strerror(errno)); + tesla_strerror(errnum)); } static const struct tesla_event_handlers failstop_handlers = {