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