- cnt = syscall(SYS_writev, f->fd, iov, iovcnt);
- if (cnt == rem) return len;
+ if (libc.main_thread) {
+ pthread_cleanup_push(cleanup, f);
+ cnt = syscall_cp(SYS_writev, f->fd, iov, iovcnt);
+ pthread_cleanup_pop(0);
+ } else {
+ cnt = syscall(SYS_writev, f->fd, iov, iovcnt);
+ }
+ if (cnt == rem) {
+ f->wend = f->buf + f->buf_size;
+ f->wpos = f->wbase = f->buf;
+ return len;
+ }