summaryrefslogtreecommitdiff
path: root/IkiWiki
diff options
context:
space:
mode:
authorjoey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071>2007-05-21 02:52:51 +0000
committerjoey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071>2007-05-21 02:52:51 +0000
commit82ac63d798cc7f45a42e14bc2ad05a9388e25a04 (patch)
treea718173f89b4d58dff64adadfff4c2199f42a9e1 /IkiWiki
parent07a1796d3bf52bca9a325cf517f742ff44b49921 (diff)
* Change the aggregate plugin's locking strategy. Now it defers loading state
until the wiki is building and already locked, unless it's aggregating. When aggregating, it does not wait for the lock if it cannot get it, and instead exits, to prevent aggregating processes from piling up.
Diffstat (limited to 'IkiWiki')
-rw-r--r--IkiWiki/Plugin/aggregate.pm18
1 files changed, 13 insertions, 5 deletions
diff --git a/IkiWiki/Plugin/aggregate.pm b/IkiWiki/Plugin/aggregate.pm
index 78f8b409c..082290114 100644
--- a/IkiWiki/Plugin/aggregate.pm
+++ b/IkiWiki/Plugin/aggregate.pm
@@ -31,22 +31,26 @@ sub getopt () { #{{{
} #}}}
sub checkconfig () { #{{{
- my $nolock=($config{post_commit} && ! IkiWiki::commit_hook_enabled());
- IkiWiki::lockwiki() unless $nolock;
- loadstate();
- if ($config{aggregate} && ! $nolock) {
+ if ($config{aggregate} && ! ($config{post_commit} &&
+ IkiWiki::commit_hook_enabled())) {
+ # don't wait for the lock
+ IkiWiki::lockwiki(0) || exit 1;
+
+ loadstate();
IkiWiki::loadindex();
aggregate();
expire();
savestate();
+
+ IkiWiki::unlockwiki();
}
- IkiWiki::unlockwiki() unless $nolock;
} #}}}
sub filter (@) { #{{{
my %params=@_;
my $page=$params{page};
+ loadstate(); # if not already loaded
# Mark all feeds originating on this page as removable;
# preprocess will unmark those that still exist.
remove_feeds($page);
@@ -117,7 +121,9 @@ sub delete (@) { #{{{
}
} #}}}
+my $state_loaded=0;
sub loadstate () { #{{{
+ return if $state_loaded;
if (-e "$config{wikistatedir}/aggregate") {
open (IN, "$config{wikistatedir}/aggregate" ||
die "$config{wikistatedir}/aggregate: $!");
@@ -148,6 +154,8 @@ sub loadstate () { #{{{
}
close IN;
+
+ $state_loaded=1;
}
} #}}}