A couple of file-scoped statc ints were the typical "if this function is
being called for the first time" flags. Move each into their respective
functions. Make them bools. Name them so the initial value is zero,
thus placing them in BSS.
enum locktype { FCNTL_LOCKING, FLOCK_LOCKING, LOCKF_LOCKING, DOT_LOCKING };
enum locktype { FCNTL_LOCKING, FLOCK_LOCKING, LOCKF_LOCKING, DOT_LOCKING };
-/*
- * Flags to indicate whether we've initialized the lock types, and
- * our saved lock types
- */
-static int datalockinit = 0;
-static int spoollockinit = 0;
+/* Our saved lock types. */
static enum locktype datalocktype, spoollocktype;
static enum locktype datalocktype, spoollocktype;
/* top of list containing all open locks */
static struct lock *l_top = NULL;
/* top of list containing all open locks */
static struct lock *l_top = NULL;
int
lkopendata(const char *file, int access, mode_t mode, int *failed_to_lock)
{
int
lkopendata(const char *file, int access, mode_t mode, int *failed_to_lock)
{
- if (! datalockinit) {
- char *cp = context_find("datalocking");
- if (cp) {
- datalocktype = init_locktype(cp);
+ if (!deja_vu) {
+ char *dl;
+
+ deja_vu = true;
+ if ((dl = context_find("datalocking"))) {
+ datalocktype = init_locktype(dl);
} else {
/* We default to fcntl locking for data files */
datalocktype = FCNTL_LOCKING;
}
} else {
/* We default to fcntl locking for data files */
datalocktype = FCNTL_LOCKING;
}
}
return lkopen(file, access, mode, datalocktype, failed_to_lock);
}
return lkopen(file, access, mode, datalocktype, failed_to_lock);
int lkopenspool(const char *file, int access, mode_t mode, int *failed_to_lock)
{
int lkopenspool(const char *file, int access, mode_t mode, int *failed_to_lock)
{
- if (! spoollockinit) {
- spoollocktype = init_locktype(spoollocking);
+ if (!deja_vu) {
+ deja_vu = true;
+ spoollocktype = init_locktype(spoollocking);
}
return lkopen(file, access, mode, spoollocktype, failed_to_lock);
}
return lkopen(file, access, mode, spoollocktype, failed_to_lock);