- w = *aux = xmalloc (sizeof *w);
- w->fh = fh;
- w->file = fn_open (fh_get_file_name (w->fh), "wb");
-
- if (w->file == NULL)
+ w = fh_lock_get_aux (lock);
+ if (w != NULL)
+ return w;
+
+ w = xmalloc (sizeof *w);
+ w->fh = fh_ref (fh);
+ w->lock = lock;
+ w->rf = replace_file_start (fh_get_file_name (w->fh), "wb",
+ (S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP
+ | S_IROTH | S_IWOTH), &w->file, NULL);
+ if (w->rf == NULL)