~ chicken-core (chicken-5) 245c96bc72702296679e49c706bff18e3fc55232
commit 245c96bc72702296679e49c706bff18e3fc55232
Author: Mario Domenech Goulart <mario@parenteses.org>
AuthorDate: Sat Jun 7 21:45:23 2025 +0200
Commit: felix <felix@call-with-current-continuation.org>
CommitDate: Sun Jun 8 10:07:53 2025 +0200
posixunix.scm: Check for _eagain in file-lock
Everywhere else we check for both _eagain and _ewouldblock, so do that
as well in file-lock.
Add a helper inline procedure to reduce code duplication and prevent
future similar cases.
Signed-off-by: felix <felix@call-with-current-continuation.org>
diff --git a/posixunix.scm b/posixunix.scm
index f329dada..7b539d2a 100644
--- a/posixunix.scm
+++ b/posixunix.scm
@@ -778,6 +778,9 @@ static int set_file_mtime(C_word filename, C_word atime, C_word mtime)
(when (fx< (link old new) 0)
(posix-error #:file-error 'hard-link "could not create hard link" old new) ) ) ) )
+(define-inline (eagain/ewouldblock? e)
+ (or (fx= e _ewouldblock)
+ (fx= e _eagain)))
(define ##sys#custom-input-port
(lambda (loc nam fd #!optional (nonblocking? #f) (bufi 1) (on-close void) (more? #f) enc)
@@ -791,8 +794,7 @@ static int set_file_mtime(C_word filename, C_word atime, C_word mtime)
(lambda ()
(let ((res (##sys#file-select-one fd)))
(if (fx= -1 res)
- (if (or (fx= _errno _ewouldblock)
- (fx= _errno _eagain))
+ (if (eagain/ewouldblock? _errno)
#f
(posix-error #:file-error loc "cannot select" fd nam))
(fx= 1 res))))]
@@ -809,8 +811,7 @@ static int set_file_mtime(C_word filename, C_word atime, C_word mtime)
(let ([cnt (##core#inline "C_read" fd buf bufsiz)])
(cond ((fx= cnt -1)
(cond
- ((or (fx= _errno _ewouldblock)
- (fx= _errno _eagain))
+ ((eagain/ewouldblock? _errno)
(##sys#thread-block-for-i/o! ##sys#current-thread fd #:input)
(##sys#thread-yield!)
(loop) )
@@ -826,8 +827,7 @@ static int set_file_mtime(C_word filename, C_word atime, C_word mtime)
(loop) )
(let ([cnt (##core#inline "C_read" fd buf bufsiz)])
(when (fx= cnt -1)
- (if (or (fx= _errno _ewouldblock)
- (fx= _errno _eagain))
+ (if (eagain/ewouldblock? _errno)
(set! cnt 0)
(posix-error #:file-error loc "cannot read" fd nam) ) )
(set! buflen cnt)
@@ -934,8 +934,7 @@ static int set_file_mtime(C_word filename, C_word atime, C_word mtime)
(let ((cnt (##core#inline "C_write" fd bv start len)))
(cond ((fx= -1 cnt)
(cond
- ((or (fx= _errno _ewouldblock)
- (fx= _errno _eagain))
+ ((eagain/ewouldblock? _errno)
(##sys#thread-yield!)
(poke bv start len) )
((fx= _errno _eintr)
@@ -1023,7 +1022,7 @@ static int set_file_mtime(C_word filename, C_word atime, C_word mtime)
(##core#inline "C_fixnum_or" _lock_nb (if shared _lock_sh _lock_ex)))))
(cond ((eq? r 0) #t)
((fx= _errno _eintr) (loop))
- ((fx= _errno _ewouldblock) #f)
+ ((eagain/ewouldblock? _errno) #f)
(else (err "locking file failed" port 'file-lock)))))))
(set! chicken.file.posix#file-lock/blocking
(lambda (port #!optional shared)
Trap