Blob Blame History Raw
diff -up ksh-20090630/src/cmd/ksh93/sh/jobs.c.jlist ksh-20090630/src/cmd/ksh93/sh/jobs.c
--- ksh-20090630/src/cmd/ksh93/sh/jobs.c.jlist	2009-04-30 00:07:32.000000000 +0200
+++ ksh-20090630/src/cmd/ksh93/sh/jobs.c	2009-08-27 08:51:48.028116714 +0200
@@ -1745,6 +1745,19 @@ static int job_chksave(register pid_t pi
 		jpold = jp;
 		jp = jp->next;
 	}
+	if(jp && (jp==jpold || count<0))
+	{
+		Sfio_t *log = sfopen((Sfio_t*)0,"/tmp/kshlog","a");
+		if(log)
+		{
+			fchmod(sffileno(log),S_IRUSR|S_IRGRP|S_IROTH|S_IWUSR|S_IWGRP|S_IWOTH);
+			sfprintf(log,"chksave loop jp==jpold=%d jpold=%p jp->pid=%d pid=%d count=%d\n",jp==jpold,jpold,jp->pid,pid,bck.count);
+			sfclose(log);
+			sfsync(log);
+			errormsg(SH_DICT,ERROR_warn(0),"job list infinite loop -- this should not happen"); 
+			abort();
+		}
+	}
 	if(jp)
 	{
 		r = 0;