Index: /trunk/Ohana/src/libdvo/include/dvo.h
===================================================================
--- /trunk/Ohana/src/libdvo/include/dvo.h	(revision 6234)
+++ /trunk/Ohana/src/libdvo/include/dvo.h	(revision 6235)
@@ -318,4 +318,6 @@
 
 /*** DVO image db I/O Functions ***/
+int dvo_image_lock (FITS_DB *db, char *filename, double timeout, int lockstate);
+int dvo_image_unlock (FITS_DB *db);
 int dvo_image_load (FITS_DB *db, int VERBOSE, int FORCE_READ);
 int dvo_image_save (FITS_DB *db, int VERBOSE);
Index: /trunk/Ohana/src/libdvo/src/dvo_image.c
===================================================================
--- /trunk/Ohana/src/libdvo/src/dvo_image.c	(revision 6234)
+++ /trunk/Ohana/src/libdvo/src/dvo_image.c	(revision 6235)
@@ -1,3 +1,32 @@
 # include <dvo.h>
+
+/* lock the image table */
+int dvo_image_lock (FITS_DB *db, char *filename, double timeout, int lockstate) {
+
+  /* lock the image catalog */
+  _check_permissions (filename);
+
+  db[0].lockstate = lockstate;
+  db[0].timeout   = timeout;
+  fits_db_init (db);
+
+  if (!fits_db_lock (db, filename)) {
+    fprintf (stderr, "ERROR: can't lock image catalog\n");
+    return (FALSE);
+  }
+  return (TRUE);
+}
+
+int dvo_image_unlock (FITS_DB *db) {
+
+  mode_t mode;
+
+  fits_db_close (db);
+
+  /* force permissions to 666 */
+  mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH;
+  chmod (db[0].filename, mode);
+  return (TRUE);
+}
 
 /* determine db mode (RAW/MEF) and read the complete table */
