- ret = ioctl(pair->channel, RELAYFS_PUT_SUBBUF);
- if(ret != 0) {
- perror("Error in unreserving sub buffer");
- goto error;
+write_error:
+ err = ioctl(pair->channel, RELAYFS_PUT_SUBBUF, &consumed_old);
+ if(err != 0) {
+ if(errno == -EFAULT) {
+ perror("Error in unreserving sub buffer");
+ ret = -EFAULT;
+ } else if(errno == -EIO) {
+ perror("Reader has been pushed by the writer, last subbuffer corrupted.");
+ /* FIXME : we may delete the last written buffer if we wish. */
+ ret = -EIO;
+ }
+ goto get_error;