unsigned int nr_blocks; /* total blocks */
unsigned int next_non_full;
int fd; /* memory backing fd */
- char file[PATH_MAX]; /* filename for fd */
unsigned int mmap_size;
};
static int add_pool(struct pool *pool, unsigned int alloc_size)
{
- void *ptr;
int fd, bitmap_blocks;
+ char file[] = "/tmp/.fio_smalloc.XXXXXX";
+ void *ptr;
- strcpy(pool->file, "/tmp/.fio_smalloc.XXXXXX");
- fd = mkstemp(pool->file);
+ fd = mkstemp(file);
if (fd < 0)
goto out_close;
goto out_unlink;
#endif
+ /*
+ * Unlink pool file now. It wont get deleted until the fd is closed,
+ * which happens both for cleanup or unexpected quit. This way we
+ * don't leave temp files around in case of a crash.
+ */
+ unlink(file);
pool->fd = fd;
nr_pools++;
fprintf(stderr, "smalloc: failed adding pool\n");
if (pool->map)
munmap(pool->map, pool->mmap_size);
- unlink(pool->file);
+ unlink(file);
out_close:
- if (fd >= 0)
- close(fd);
+ close(fd);
return 1;
}
static void cleanup_pool(struct pool *pool)
{
- unlink(pool->file);
+ /*
+ * This will also remove the temporary file we used as a backing
+ * store, it was already unlinked
+ */
close(pool->fd);
munmap(pool->map, pool->mmap_size);