Merge lp:~verifydtapn-contributers/verifydtapn/TimeDartTraceBug into lp:verifydtapn

Proposed by Peter Gjøl Jensen
Status: Merged
Approved by: Jiri Srba
Approved revision: 324
Merged at revision: 321
Proposed branch: lp:~verifydtapn-contributers/verifydtapn/TimeDartTraceBug
Merge into: lp:verifydtapn
Diff against target: 124 lines (+27/-26)
3 files modified
src/DiscreteVerification/VerificationTypes/LivenessSearch.cpp (+0/-4)
src/DiscreteVerification/VerificationTypes/TimeDartVerification.cpp (+8/-0)
src/DiscreteVerification/VerificationTypes/Verification.hpp (+19/-22)
To merge this branch: bzr merge lp:~verifydtapn-contributers/verifydtapn/TimeDartTraceBug
Reviewer Review Type Date Requested Status
Mathias Grund Sørensen code Approve
Jiri Srba Approve
Jakob Taankvist Pending
Review via email: mp+230061@code.launchpad.net

Commit message

The fix contains a minor change to the structure of the trace-generation. This will only affect livenes queries ending in delay forever or deadlocks.

Description of the change

The fix contains a minor change to the structure of the trace-generation. This will only affect livenes queries ending in delay forever or deadlocks.

Please verify that this fix does not break any other traces.

To post a comment you must log in.
323. By Peter Gjøl Jensen

should fix delay forever/deadlock prefference

324. By Peter Gjøl Jensen

fixed raised assert

Revision history for this message
Jiri Srba (srba) wrote :

I thoroughly tested it now and it seems work correctly. In particular I like the simplification
of the code when detecting deadlock vs. delay-for-ever.

review: Approve
Revision history for this message
Mathias Grund Sørensen (mathias.grund) wrote :

Code looks good and changes seem reasonable.

review: Approve (code)
Revision history for this message
Mathias Grund Sørensen (mathias.grund) wrote :

Code looks good and changes seem reasonable.

review: Approve (code)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/DiscreteVerification/VerificationTypes/LivenessSearch.cpp'
2--- src/DiscreteVerification/VerificationTypes/LivenessSearch.cpp 2014-07-14 09:54:33 +0000
3+++ src/DiscreteVerification/VerificationTypes/LivenessSearch.cpp 2014-08-11 19:51:42 +0000
4@@ -51,10 +51,6 @@
5 marking->incrementAge();
6 marking->setGeneratedBy(NULL);
7 if(addToPW(marking, &next_marking)){
8- // this can only occur when there is a deadlock detected by cut
9- // pop last marking as it is not a part of the trace
10- // ie. we detect the situation 1 delay later.
11- trace.pop();
12 return true;
13 }
14 endOfMaxRun = false;
15
16=== modified file 'src/DiscreteVerification/VerificationTypes/TimeDartVerification.cpp'
17--- src/DiscreteVerification/VerificationTypes/TimeDartVerification.cpp 2014-07-14 09:54:33 +0000
18+++ src/DiscreteVerification/VerificationTypes/TimeDartVerification.cpp 2014-08-11 19:51:42 +0000
19@@ -213,6 +213,7 @@
20
21 if (last != NULL) {
22 last->setParent(mc); // set the parent of the last marking
23+ mc->setNumberOfChildren(1);
24 }
25
26 last = mc;
27@@ -256,6 +257,7 @@
28 mc->setGeneratedBy(NULL); // NULL indicates that it is a delay transition
29 if (last != NULL){
30 last->setParent(mc); // set the parent of the last marking
31+ mc->setNumberOfChildren(1);
32 }
33 if(!l->getParent()){
34 l->setParent(mc);
35@@ -268,9 +270,11 @@
36 }
37 if(last != NULL){
38 last->setParent(m);
39+ m->setNumberOfChildren(1);
40 }
41 if(!l->getParent()) {
42 l->setParent(m);
43+ m->setNumberOfChildren(1);
44 }
45 m->cut(placeStats);
46 last = m;
47@@ -279,6 +283,10 @@
48 upper = trace->upper;
49 trace = (TraceDart*) trace->parent;
50 }
51+
52+ if(!deadlock){
53+ l->setNumberOfChildren(1);
54+ }
55
56 printXMLTrace(l, traceStack, query, tapn);
57 }
58
59=== modified file 'src/DiscreteVerification/VerificationTypes/Verification.hpp'
60--- src/DiscreteVerification/VerificationTypes/Verification.hpp 2014-07-14 09:54:33 +0000
61+++ src/DiscreteVerification/VerificationTypes/Verification.hpp 2014-08-11 19:51:42 +0000
62@@ -151,11 +151,13 @@
63 void Verification<T>::removeLastIfDelay(rapidxml::xml_node<>& root)
64 {
65 using namespace rapidxml;
66- xml_node<>* node = root.last_node();
67- if(node){
68- char* name = node->name();
69- if(strcmp(name, "delay") == 0){
70- root.remove_last_node();
71+ if(root.first_node()){ // if there is a node in the trace
72+ xml_node<>* node = root.last_node();
73+ if(node){
74+ char* name = node->name();
75+ if(strcmp(name, "delay") == 0){
76+ root.remove_last_node();
77+ }
78 }
79 }
80 }
81@@ -262,7 +264,7 @@
82 break;
83 }
84 temp = (T*)temp->getParent();
85- } while(temp && temp->getParent() && temp->getParent() != top);
86+ } while(temp && temp->getParent());
87 if(foundLoop){
88 root->append_node(doc.allocate_node(node_element, "loop"));
89 }
90@@ -275,24 +277,19 @@
91 //Trace ended, goto * or deadlock
92 if (query->getQuantifier() == AST::EG || query->getQuantifier() == AST::AF) {
93 if (!foundLoop && !delayedForever) {
94- if (m->getNumberOfChildren() > 0) {
95- root->append_node(doc.allocate_node(node_element, "deadlock"));
96+ xml_node<>* node;
97+ if(m->canDeadlock(tapn, 0, false)){
98+ // check if deadlock
99+ node = doc.allocate_node(node_element, "deadlock");
100 } else {
101-
102- xml_node<>* node;
103- if(m->canDeadlock(tapn, 0, false)){
104- // check if deadlock
105- node = doc.allocate_node(node_element, "deadlock");
106- } else {
107- // if not it is delay forever
108-
109- // remove delay before delay forever
110- removeLastIfDelay(*root);
111- node = doc.allocate_node(node_element, "delay", doc.allocate_string("forever"));
112-
113- }
114- root->append_node(node);
115+ // if not it is delay forever
116+
117+ // remove delay before delay forever
118+ removeLastIfDelay(*root);
119+ node = doc.allocate_node(node_element, "delay", doc.allocate_string("forever"));
120+
121 }
122+ root->append_node(node);
123 }
124 }
125

Subscribers

People subscribed via source and target branches