From: Joey Hess <joey@kodama.kitenet.net>
Date: Sun, 3 Feb 2008 20:17:15 +0000 (-0500)
Subject: add aggregate locking functions
X-Git-Tag: 2.31~41
X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/commitdiff_plain/38affb0c1c4e2b89beb63d6f8dc3f172eee7bd02

add aggregate locking functions
---

diff --git a/IkiWiki/Plugin/aggregate.pm b/IkiWiki/Plugin/aggregate.pm
index 0f50fab06..cfc4ec955 100644
--- a/IkiWiki/Plugin/aggregate.pm
+++ b/IkiWiki/Plugin/aggregate.pm
@@ -495,4 +495,26 @@ sub htmlfn ($) { #{{{
 	return shift().".".$config{htmlext};
 } #}}}
 
+my $aggregatelock;
+
+sub lockaggregate () { #{{{
+	# Take an exclusive lock to prevent multiple concurrent aggregators.
+	# Returns true if the lock was aquired.
+	if (! -d $config{wikistatedir}) {
+		mkdir($config{wikistatedir});
+	}
+	open($aggregatelock, '>', "$config{wikistatedir}/aggregatelock") ||
+		error ("cannot open to $config{wikistatedir}/aggregatelock: $!");
+	if (! flock($aggregatelock, 2 | 4)) { # LOCK_EX | LOCK_NB
+		close($aggregatelock) || error("failed closing aggregatelock: $!");
+		return 0;
+	}
+	return 1;
+} #}}}
+
+sub unlockaggregate () { #{{{
+	return close($aggregatelock) if $aggregatelock;
+	return;
+} #}}}
+
 1