The branch "master" has been updated in SBCL:
via 40269d0ac711b36151bec69db7a021a28cef41ee (commit)
from b43c51beeb0569a38900e1e5a78606711f987742 (commit)
- Log -----------------------------------------------------------------
commit 40269d0ac711b36151bec69db7a021a28cef41ee
Author: Nikodemus Siivola <nikodemus@...>
Date: Thu Aug 4 13:31:06 2011 +0300
fix short writes when not using SERVE-EVENT
Regression since 1.0.42.43, lp#820599.
Thanks to Robert Brown.
If we remain in the loop, we need to update the local HEAD
variable in the event of a short write.
NOTE: No test case yet, as this is dependant on the size of kernel
buffers, and trying to catch the short-write -case is tricky.
---
NEWS | 1 +
src/code/fd-stream.lisp | 6 +++---
2 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/NEWS b/NEWS
index cb8226b..44a2f04 100644
--- a/NEWS
+++ b/NEWS
@@ -18,6 +18,7 @@ changes relative to sbcl-1.0.50:
(lp#549673)
* bug fix: SSE comparison instructions can be disassembled even when one
operand is in memory. (lp#814702)
+ * bug fix: incomplete writes when not using SERVE-EVENTS. (lp#820599)
changes in sbcl-1.0.50 relative to sbcl-1.0.49:
* enhancement: errors from FD handlers now provide a restart to remove
diff --git a/src/code/fd-stream.lisp b/src/code/fd-stream.lisp
index a759017..7fda172 100644
--- a/src/code/fd-stream.lisp
+++ b/src/code/fd-stream.lisp
@@ -291,9 +291,9 @@
(return (reset-buffer obuf)))
(count
;; Partial write -- update buffer status and
- ;; queue or wait. Do not use INCF! Another
- ;; thread might have moved head...
- (setf (buffer-head obuf) (+ count head))
+ ;; queue or wait.
+ (incf head count)
+ (setf (buffer-head obuf) head)
(queue-or-wait))
#!-win32
((eql errno sb!unix:ewouldblock)
-----------------------------------------------------------------------
hooks/post-receive
--
SBCL
|