This is probably not legit - you're not holding the GVL here. I would add an `errno` member to your sysvmq_t structure to report failure conditions. I would write it like this:
```c
while ((arguments->msg_size = msgrcv(sysv->id, sysv->msgbuf, sysv->buffer_size, arguments->type, arguments->flags)) < 0) {
  if (errno != EINTR) {
    sysv->errno = errno
    return NULL;
  }
}
```