aboutsummaryrefslogtreecommitdiffstats
path: root/lib/LXRng/Context.pm
diff options
context:
space:
mode:
authorArne Georg Gleditsch <argggh@lxr.linpro.no>2008-02-12 22:50:51 +0100
committerArne Georg Gleditsch <argggh@lxr.linpro.no>2008-02-12 22:50:51 +0100
commit155f52e7f2c6bc15c1d252bfd8794cc4071ee16e (patch)
treef9e6b18a86d2a3427b31afbd5f3e82a6a02cd23e /lib/LXRng/Context.pm
parent355ef0c03574793a43b0b2259d9fce573680f0fa (diff)
Cache config over process lifetime, bar changes or timeout.
Diffstat (limited to 'lib/LXRng/Context.pm')
-rw-r--r--lib/LXRng/Context.pm16
1 files changed, 16 insertions, 0 deletions
diff --git a/lib/LXRng/Context.pm b/lib/LXRng/Context.pm
index f4865f0..6909c58 100644
--- a/lib/LXRng/Context.pm
+++ b/lib/LXRng/Context.pm
@@ -22,6 +22,8 @@ package LXRng::Context;
use strict;
use LXRng;
+use vars qw($cached_config $cached_config_stat $cached_config_age);
+
sub new {
my ($self, %args) = @_;
@@ -105,6 +107,18 @@ sub read_config {
my $confpath = $LXRng::ROOT.'/lxrng.conf';
+ if ($cached_config) {
+ my @stat = stat($confpath);
+ if (@stat and
+ $stat[9] == $cached_config_stat and
+ time - $cached_config_age < 3600)
+ {
+ return $cached_config;
+ }
+ $cached_config_stat = $stat[9];
+ $cached_config_age = time;
+ }
+
if (open(my $cfgfile, $confpath)) {
my @config = eval("use strict; use warnings;\n".
"#line 1 \"configuration file\"\n".
@@ -113,6 +127,8 @@ sub read_config {
die("Bad configuration file format\n")
unless @config == 1 and ref($config[0]) eq 'HASH';
+
+ $cached_config = $config[0];
return $config[0];
}
else {