From: Eric Wong (Contractor, The Linux Foundation) <e@80x24.org>
Date: Sat, 3 Mar 2018 07:16:29 +0000 (+0000)
Subject: searchidxskeleton: add a note about locking
X-Git-Tag: v1.1.0-pre1~188
X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=aa3e1126d751560e8648ebc54f22401f183f9572;p=public-inbox.git

searchidxskeleton: add a note about locking

It's tempting to rely on the atomicity of smaller-than-PIPE_BUF
writes, but it doesn't work if mixed with larger ones.
---

diff --git a/lib/PublicInbox/SearchIdxSkeleton.pm b/lib/PublicInbox/SearchIdxSkeleton.pm
index 063c83e8..506e566f 100644
--- a/lib/PublicInbox/SearchIdxSkeleton.pm
+++ b/lib/PublicInbox/SearchIdxSkeleton.pm
@@ -80,6 +80,8 @@ sub index_skeleton {
 	$str = length($str) . "\n" . $str;
 
 	# multiple processes write to the same pipe, so use flock
+	# We can't avoid this lock for <=PIPE_BUF writes, either,
+	# because those atomic writes can break up >PIPE_BUF ones
 	$self->_lock_acquire;
 	print $w $str or $err = $!;
 	$self->_lock_release;