[net.bugs.4bsd] JOVE version 4.3 and beyond

jpayne@rochester.ARPA (Jonathan Payne) (08/31/86)

There is a bug in the version of JOVE that got released with 4.3BSD.
At first it was hard to recreate but it seemed to get easier as time
went on (probably my imagination).  The symptom is pretty horrible--
every now and then part of your text was replaced with text from some
place else, some other buffer, etc.  Anyway, the fix is pretty simple.
In the file IO.C, procedure getblock(), very near the top:

	if (lastb != 0 && lastb->b_bno == bno)
		return lastb->b_buf + off;

becomes
	if (lastb != 0 && lastb->b_bno == bno) {
		lastb->b_dirty |= iof;
		return lastb->b_buf + off;
	}

Basically the problem was that in certain circumstances a block which WAS
being written into WASN'T being marked as dirty, so when it came time to
reassign that block to another one the old contents were being thrown away
instead of first being written to the disk.

Sorry 'bout this one.