Browse Source

made deadlocks on locks better traceable (other: only hint)

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@7212 8c9fc860-2736-0410-a75d-ab315db34111
felixf 8 years ago
parent
commit
f620953fad
1 changed files with 4 additions and 2 deletions
  1. 4 2
      source/Locks.Mod

+ 4 - 2
source/Locks.Mod

@@ -125,10 +125,11 @@ TYPE
 
 
 		(** acquire a write-lock on the object *)
 		(** acquire a write-lock on the object *)
 		PROCEDURE AcquireWrite*;
 		PROCEDURE AcquireWrite*;
-		VAR me : ANY;
+		VAR me, other : ANY;
 		BEGIN
 		BEGIN
 			IF Statistics THEN INC(nofWriteLocks); END;
 			IF Statistics THEN INC(nofWriteLocks); END;
 			me := Objects.ActiveObject();
 			me := Objects.ActiveObject();
+			other := lockedBy;
 			IF lockedBy = me THEN (* recursive use *)
 			IF lockedBy = me THEN (* recursive use *)
 				INC(lockLevel);
 				INC(lockLevel);
 				ASSERT(lockLevel # -1, 3015)	(* overflow *)
 				ASSERT(lockLevel # -1, 3015)	(* overflow *)
@@ -178,10 +179,11 @@ TYPE
 
 
 		(** acquire a read-lock on the object *)
 		(** acquire a read-lock on the object *)
 		PROCEDURE AcquireRead*;
 		PROCEDURE AcquireRead*;
-		VAR me : ANY; i : LONGINT; found : BOOLEAN; t : ReaderLockList;
+		VAR me, other : ANY; i : LONGINT; found : BOOLEAN; t : ReaderLockList;
 		BEGIN {EXCLUSIVE}
 		BEGIN {EXCLUSIVE}
 			IF Statistics THEN INC(nofReadLocks); END;
 			IF Statistics THEN INC(nofReadLocks); END;
 			me := Objects.ActiveObject();
 			me := Objects.ActiveObject();
+			other := lockedBy;
 			AWAIT(DEADLOCK OR (lockedBy = NIL) OR (lockedBy = me));  (* write owner may acquire a read *)
 			AWAIT(DEADLOCK OR (lockedBy = NIL) OR (lockedBy = me));  (* write owner may acquire a read *)
 			IF DEADLOCK THEN HALT(3099) END;
 			IF DEADLOCK THEN HALT(3099) END;
 			lastReader := me;
 			lastReader := me;