From: Eric Wong (Contractor, The Linux Foundation) 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/?p=public-inbox.git;a=commitdiff_plain;h=aa3e1126d751560e8648ebc54f22401f183f9572 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;