ssize_t ret;
ret = lxc_read_nointr(fd, &sync, sizeof(sync));
- if (ret < 0) {
- SYSERROR("Sync wait failure");
- return -1;
- }
+ if (ret < 0)
+ return log_error_errno(-1, errno, "Sync wait failure");
if (!ret)
return 0;
- if ((size_t)ret != sizeof(sync)) {
- ERROR("Unexpected sync size: %zu expected %zu", (size_t)ret, sizeof(sync));
- return -1;
- }
+ if ((size_t)ret != sizeof(sync))
+ return log_error(-1, "Unexpected sync size: %zu expected %zu", (size_t)ret, sizeof(sync));
- if (sync == LXC_SYNC_ERROR) {
- ERROR("An error occurred in another process "
- "(expected sequence number %d)", sequence);
- return -1;
- }
+ if (sync == LXC_SYNC_ERROR)
+ return log_error(-1, "An error occurred in another process (expected sequence number %d)", sequence);
+
+ if (sync != sequence)
+ return log_error(-1, "Invalid sequence number %d. Expected sequence number %d", sync, sequence);
- if (sync != sequence) {
- ERROR("Invalid sequence number %d. Expected sequence number %d",
- sync, sequence);
- return -1;
- }
return 0;
}
{
int sync = sequence;
- if (lxc_write_nointr(fd, &sync, sizeof(sync)) < 0) {
- SYSERROR("Sync wake failure");
- return -1;
- }
+ if (lxc_write_nointr(fd, &sync, sizeof(sync)) < 0)
+ return log_error_errno(-1, errno, "Sync wake failure");
+
return 0;
}
{
if (__sync_wake(fd, sequence))
return -1;
+
return __sync_wait(fd, sequence+1);
}
int ret;
ret = socketpair(AF_LOCAL, SOCK_STREAM, 0, handler->sync_sock);
- if (ret) {
- SYSERROR("failed to create synchronization socketpair");
- return -1;
- }
+ if (ret)
+ return log_error_errno(-1, errno, "failed to create synchronization socketpair");
/* Be sure we don't inherit this after the exec */
- fcntl(handler->sync_sock[0], F_SETFD, FD_CLOEXEC);
+ ret = fcntl(handler->sync_sock[0], F_SETFD, FD_CLOEXEC);
+ if (ret < 0)
+ return log_error_errno(-1, errno, "Failed to make socket close-on-exec");
return 0;
}
void lxc_sync_fini_child(struct lxc_handler *handler)
{
- if (handler->sync_sock[0] != -1) {
- close(handler->sync_sock[0]);
- handler->sync_sock[0] = -1;
- }
+ close_prot_errno_disarm(handler->sync_sock[0]);
}
void lxc_sync_fini_parent(struct lxc_handler *handler)
{
- if (handler->sync_sock[1] != -1) {
- close(handler->sync_sock[1]);
- handler->sync_sock[1] = -1;
- }
+ close_prot_errno_disarm(handler->sync_sock[1]);
}
void lxc_sync_fini(struct lxc_handler *handler)