|
Lines 119-126
Link Here
|
| 119 |
evt.setThread(theThread); |
119 |
evt.setThread(theThread); |
| 120 |
evt.setTime( createDeltaTime()); |
120 |
evt.setTime( createDeltaTime()); |
| 121 |
evt.setLockingThread( lockingThread ); |
121 |
evt.setLockingThread( lockingThread ); |
| 122 |
TRCThreadDeadLockEvent contagious = (TRCThreadDeadLockEvent)wfls.get(0); |
122 |
if (wfls.get(0) instanceof TRCThreadDeadLockEvent) { |
| 123 |
evt.setNextDeadLockEvent( contagious ); |
123 |
TRCThreadDeadLockEvent contagious = (TRCThreadDeadLockEvent)wfls.get(0); |
|
|
124 |
evt.setNextDeadLockEvent( contagious ); |
| 125 |
} |
| 124 |
addCopyOfAnnotationsIfRequired(evt); |
126 |
addCopyOfAnnotationsIfRequired(evt); |
| 125 |
events.add( evt ); |
127 |
events.add( evt ); |
| 126 |
new_deadlock = true; |
128 |
new_deadlock = true; |
|
Lines 226-232
Link Here
|
| 226 |
return false; |
228 |
return false; |
| 227 |
} |
229 |
} |
| 228 |
} |
230 |
} |
| 229 |
return false; |
231 |
return true; |
| 230 |
} |
232 |
} |
| 231 |
private boolean checkCircularLock( ArrayList wfls, int start_index ) |
233 |
private boolean checkCircularLock( ArrayList wfls, int start_index ) |
| 232 |
{ |
234 |
{ |
|
Lines 326-348
Link Here
|
| 326 |
Object lt_last_event = lt_events.get( lt_events.size()-1); |
328 |
Object lt_last_event = lt_events.get( lt_events.size()-1); |
| 327 |
if( !(lt_last_event instanceof TRCThreadDeadLockEvent )) continue; |
329 |
if( !(lt_last_event instanceof TRCThreadDeadLockEvent )) continue; |
| 328 |
TRCThreadDeadLockEvent dl = (TRCThreadDeadLockEvent)lt_last_event; |
330 |
TRCThreadDeadLockEvent dl = (TRCThreadDeadLockEvent)lt_last_event; |
| 329 |
if( wfl.getTime() >= dl.getTime() ) |
331 |
|
| 330 |
{ |
332 |
//this wfl must be replaced by a deadlock ! |
| 331 |
//this wfl must be replaced by a deadlock ! |
333 |
events.remove( events.size()-1 ); |
| 332 |
events.remove( events.size()-1 ); |
334 |
//replace wfl by a deadlock: |
| 333 |
//replace wfl by a deadlock: |
335 |
TRCThreadDeadLockEvent evt = TraceFactory.eINSTANCE.createTRCThreadDeadLockEvent(); |
| 334 |
TRCThreadDeadLockEvent evt = TraceFactory.eINSTANCE.createTRCThreadDeadLockEvent(); |
336 |
evt.setLockedObject( wfl.getLockedObject() ); |
| 335 |
evt.setLockedObject( wfl.getLockedObject() ); |
337 |
evt.setThread( thread ); |
| 336 |
evt.setThread( thread ); |
338 |
evt.setTime( wfl.getTime() ); |
| 337 |
evt.setTime( wfl.getTime() ); |
339 |
evt.setLockingThread( lockingThread ); |
| 338 |
evt.setLockingThread( lockingThread ); |
340 |
evt.setNextDeadLockEvent( dl ); |
| 339 |
evt.setNextDeadLockEvent( dl ); |
341 |
addCopyOfAnnotationsIfRequired(evt); |
| 340 |
addCopyOfAnnotationsIfRequired(evt); |
342 |
events.add( evt ); |
| 341 |
events.add( evt ); |
343 |
dl_added = true; |
| 342 |
dl_added = true; |
344 |
//as another loop is required: do it right now! |
| 343 |
//as another loop is required: do it right now! |
345 |
break; |
| 344 |
break; |
|
|
| 345 |
} |
| 346 |
} |
346 |
} |
| 347 |
} |
347 |
} |
| 348 |
} |
348 |
} |