New primitives for fsync and exclusive output files.
authorTaylor R. Campbell <net/mumble/campbell>
Sat, 21 Mar 2009 07:09:09 +0000 (07:09 +0000)
committerTaylor R. Campbell <net/mumble/campbell>
Sat, 21 Mar 2009 07:09:09 +0000 (07:09 +0000)
commit4dc6c962c4971eaa99211084a8b9d0cad98d8d7c
treeefff199609004735cca6aa54d17c26b9150a47fb
parente5a3a725f2a85bbddd94fd035ffcc0f373d537df
New primitives for fsync and exclusive output files.

The primitive procedure CHANNEL-SYNCHRONIZE attempts to guarantee
that any data associated with the channel are written to permanent
storage.  Passing channels not backed by files in permanent storage
is currently an error, but perhaps should be a no-op instead.  This
procedure does what the fsync system call ought to do, which on most
operating systems it does not necessarily do; this procedure attempts
various different methods from different operating systems to ensure
that data are written to disk and that any disk caches for them are
forced to physical media.

New procedures OPEN-EXCLUSIVE-OUTPUT-FILE and CALL-WITH-*, WITH-*
variants, and binary output file variants, create files at pathnames
that currently have no links, or signal errors if they do.  Errors on
opening files now establish restarts to replace pathnames.

These new primitives are implemented only on Unix; Windows and OS/2
implementations are missing.
17 files changed:
v7/src/microcode/configure.ac
v7/src/microcode/ntfile.c
v7/src/microcode/ntio.c
v7/src/microcode/os2file.c
v7/src/microcode/os2io.c
v7/src/microcode/osfile.h
v7/src/microcode/osio.h
v7/src/microcode/prosfile.c
v7/src/microcode/prosio.c
v7/src/microcode/syscall.h
v7/src/microcode/ux.h
v7/src/microcode/uxfile.c
v7/src/microcode/uxio.c
v7/src/microcode/uxtop.c
v7/src/runtime/fileio.scm
v7/src/runtime/io.scm
v7/src/runtime/runtime.pkg