static void shm_queue_init(void) { int ret; shmfd = open(shmfile, O_CREAT | O_RDWR, 0644); if (shmfd < 0) panic("cannot open shared file, %s\n", shmfile); shm_queue_lock(); ret = ftruncate(shmfd, sizeof(*shm_queue)); assert(ret == 0); shm_queue = mmap(0, sizeof(*shm_queue), PROT_READ | PROT_WRITE, MAP_SHARED, shmfd, 0); assert(shm_queue != MAP_FAILED); if (is_shm_queue_valid()) event_pos = shm_queue->pos; else { /* initialize shared memory */ event_pos = 0; ret = ftruncate(shmfd, 0); assert(ret == 0); ret = ftruncate(shmfd, sizeof(*shm_queue)); assert(ret == 0); shm_queue_set_chksum(); } shm_queue_unlock(); }
static void shm_queue_init(void) { int ret; shmfd = open(shmfile, O_CREAT | O_RDWR, 0644); if (shmfd < 0) panic("cannot open shared file, %s", shmfile); shm_queue_lock(); ret = xftruncate(shmfd, sizeof(*shm_queue)); if (ret != 0) panic("failed to truncate shmfile, %m"); shm_queue = mmap(NULL, sizeof(*shm_queue), PROT_READ | PROT_WRITE, MAP_SHARED, shmfd, 0); if (shm_queue == MAP_FAILED) panic("mmap error, %m"); if (is_shm_queue_valid()) { block_event_pos = shm_queue->block_event_pos; nonblock_event_pos = shm_queue->nonblock_event_pos; } else { /* initialize shared memory */ block_event_pos = 0; nonblock_event_pos = 0; ret = xftruncate(shmfd, 0); if (ret != 0) panic("failed to truncate shmfile, %m"); ret = xftruncate(shmfd, sizeof(*shm_queue)); if (ret != 0) panic("failed to truncate shmfile, %m"); } shm_queue_unlock(); }