picolisp

Unnamed repository; edit this file to name it for gitweb.
git clone https://logand.com/git/picolisp.git/
Log | Files | Refs | README | LICENSE

commit 3156d8484ed0013a520b5a30466d75ee14cda865
parent a8d83f4fa8e13e42524eb87cd4c7c315503ed118
Author: Alexander Burger <abu@software-lab.de>
Date:   Fri, 22 Feb 2013 10:30:30 +0100

Journal for 'dbck' free list disabled
Diffstat:
Mersatz/picolisp.jar | 0
Msrc/io.c | 10++++++++--
Msrc/vers.h | 2+-
Msrc64/db.l | 8+++++++-
Msrc64/version.l | 4++--
5 files changed, 18 insertions(+), 6 deletions(-)

diff --git a/ersatz/picolisp.jar b/ersatz/picolisp.jar Binary files differ. diff --git a/src/io.c b/src/io.c @@ -1,4 +1,4 @@ -/* 31jan13abu +/* 22feb13abu * (c) Software Lab. Alexander Burger */ @@ -3564,6 +3564,7 @@ any doDbck(any ex) { any x, y; bool flg; int i; + FILE *jnl = Jnl; adr next, p, cnt; word2 blks, syms; byte buf[2*BLK]; @@ -3592,7 +3593,9 @@ any doDbck(any ex) { x = mkStr("Circular free list"); goto done; } + Jnl = NULL; Block[0] |= TAGMASK, wrBlock(); // Mark free list + Jnl = jnl; } for (p = BLKSIZE; p != next; p += BLKSIZE) { // Check all chains if (rdBlock(p), (Block[0] & TAGMASK) == 0) { @@ -3619,8 +3622,11 @@ any doDbck(any ex) { BlkLink = getAdr(buf); // Unmark free list while (BlkLink) { rdBlock(BlkLink); - if (Block[0] & TAGMASK) + if (Block[0] & TAGMASK) { + Jnl = NULL; Block[0] &= BLKMASK, wrBlock(); + Jnl = jnl; + } } if (cnt != next) x = mkStr("Bad count"); diff --git a/src/vers.h b/src/vers.h @@ -1 +1 @@ -static byte Version[4] = {3,1,1,13}; +static byte Version[4] = {3,1,1,14}; diff --git a/src64/db.l b/src64/db.l @@ -1,4 +1,4 @@ -# 28dec12abu +# 22feb13abu # (c) Software Lab. Alexander Burger # 6 bytes in little endian format @@ -2068,9 +2068,12 @@ call mkStrE_E # Return message jmp 90 end + push (DbJnl) # Disable Journal + ld (DbJnl) 0 ld Z (DbBlock) # Block buffer in Z again or (Z) BLKTAG # Mark free list call wrBlockZ # Write block + pop (DbJnl) # Restore Journal loop ld X BLKSIZE # 'p' in X do # Check all chains @@ -2135,8 +2138,11 @@ ld B (Z) # Get tag byte and B BLKTAG # Block tag non-zero? if nz # Nes + push (DbJnl) # Disable Journal + ld (DbJnl) 0 off (Z) BLKTAG # Clear tag call wrBlockZ # Write block + pop (DbJnl) # Restore Journal end ld A (BlkLink) # Get next block loop diff --git a/src64/version.l b/src64/version.l @@ -1,6 +1,6 @@ -# 19feb13abu +# 22feb13abu # (c) Software Lab. Alexander Burger -(de *Version 3 1 1 13) +(de *Version 3 1 1 14) # vi:et:ts=3:sw=3