diff options
Diffstat (limited to 'mapfile.c')
-rw-r--r-- | mapfile.c | 16 |
1 files changed, 5 insertions, 11 deletions
@@ -58,7 +58,7 @@ char *mapname[2][3] = { }; char *mapdir[2] = { MAP_DIR, NULL }; -int mapmode[3] = { O_RDONLY, O_RDWR|O_CREAT, O_RDWR|O_CREAT|O_TRUNC }; +int mapmode[3] = { O_RDONLY, O_RDWR|O_CREAT, O_RDWR|O_CREAT|O_EXCL }; char *mapsmode[3] = { "r", "w", "w"}; FILE *open_map(int modenum, int *choice) @@ -120,14 +120,11 @@ static int lwhich = 0; int map_lock(struct map_ent **melp) { if (lf == NULL) { - lf = open_map(2, &lwhich); + do { + lf = open_map(2, &lwhich); + } while (lf == NULL && errno == EEXIST); if (lf == NULL) return -1; - if (flock(fileno(lf), LOCK_EX) != 0) { - fclose(lf); - lf = NULL; - return -1; - } } if (*melp) map_free(*melp); @@ -137,10 +134,7 @@ int map_lock(struct map_ent **melp) void map_unlock(struct map_ent **melp) { - if (lf) { - flock(fileno(lf), LOCK_UN); - fclose(lf); - } + fclose(lf); unlink(mapname[lwhich][2]); lf = NULL; } |