This is the mail archive of the frysk@sources.redhat.com mailing list for the frysk project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: partial merge of syscall and non-syscall TaskStates


On Mon, 2006-08-28 at 16:24 +0200, Mark Wielaard wrote:
> It does highlight a small difference between the syscall and non-syscall
> states. In some cases a pending signals seems to be discarded. Adding
> tests now to verify and fix if necessary.

Creating a test for this was difficult since I couldn't figure out
precisely when this code is triggered. It seems to only matter when a
signal arrives when in the attaching state, which means we have done an
sendAttach(), so we will then get a stopped event. Apparently there is a
change we get a signal event (probably send externally) before that
happens, but I couldn't figure out an reliable way to generate such a
sequence. I did fixup the code so the syscall and non-syscall cases are
similar. This doesn't impact any of the existing tests.

2006-08-29  Mark Wielaard  <mark@klomp.org>

        * TaskState.java (transitionToSyscallRunningState): Add signal
        parameter.

Cheers,

Mark
Index: frysk/proc/TaskState.java
===================================================================
RCS file: /cvs/frysk/frysk-core/frysk/proc/TaskState.java,v
retrieving revision 1.105
diff -u -r1.105 TaskState.java
--- frysk/proc/TaskState.java	28 Aug 2006 14:24:36 -0000	1.105
+++ frysk/proc/TaskState.java	29 Aug 2006 13:44:58 -0000
@@ -320,11 +320,11 @@
 	 * is both unblocked and continued, should transition
 	 * to the syscallRunning state.
 	 */
-	static TaskState transitionToSyscallRunningState (Task task)
+      static TaskState transitionToSyscallRunningState (Task task, int signal)
 	{
 	    logger.log(Level.FINE, "transitionToSyscallRunningState\n");
 	    if (task.notifyAttached () > 0)
-		return syscallBlockedContinue;
+	      return new BlockedSignal (signal, true);
 	    task.sendSyscallContinue (0);
 	    return syscallRunning;
 	}
@@ -356,7 +356,7 @@
 		if (task.blockers.size () == 0)
 		  {
 		    if (syscallObserverAdded)
-		      return transitionToSyscallRunningState(task);
+		      return transitionToSyscallRunningState(task, signal);
 		    else
 		      return Attached.transitionToRunningState(task, signal);
 		  }
@@ -404,7 +404,7 @@
 		if (task.blockers.size () == 0)
 		  {
 		    if (syscallObserverAdded)
-		      return transitionToSyscallRunningState(task);
+		      return transitionToSyscallRunningState(task, signal);
 		    else
 		      return transitionToRunningState(task, signal);
 		  }

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]