summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorGravatar Alexandre Alapetite <alexandre@alapetite.fr> 2014-02-11 21:48:10 +0100
committerGravatar Alexandre Alapetite <alexandre@alapetite.fr> 2014-02-11 21:48:10 +0100
commit0cabd1f50dd7d1cf0941a50139e6fbeed6825b4d (patch)
tree404190eba703df08a741623db491ea0917488b6d /app
parentd48f612c437009069593978fe43833fe2c7d74ea (diff)
Mutex par flux pour les actualisations
Contribue à https://github.com/marienfressinaud/FreshRSS/issues/351 Nouvelle constante TMP_PATH comme répertoire pour stocker des fichiers temporaires (si possible en mémoire et non sur disque, tel tmpfs pour /tmp sur certaines distributions Linux) Requiert PHP 5.2.1+ (contre 5.2.0 auparavant) pour le `sys_get_temp_dir()`
Diffstat (limited to 'app')
-rwxr-xr-xapp/Controllers/feedController.php5
-rw-r--r--app/Models/Feed.php18
-rwxr-xr-xapp/actualize_script.php19
3 files changed, 23 insertions, 19 deletions
diff --git a/app/Controllers/feedController.php b/app/Controllers/feedController.php
index 55e8f76cf..61bfc5919 100755
--- a/app/Controllers/feedController.php
+++ b/app/Controllers/feedController.php
@@ -189,6 +189,10 @@ class FreshRSS_feed_Controller extends Minz_ActionController {
$flux_update = 0;
$is_read = $this->view->conf->mark_when['reception'] ? 1 : 0;
foreach ($feeds as $feed) {
+ if (!$feed->lock()) {
+ Minz_Log::record('Feed already being actualized: ' . $feed->url(), Minz_Log::NOTICE);
+ continue;
+ }
try {
$url = $feed->url();
$feedHistory = $feed->keepHistory();
@@ -251,6 +255,7 @@ class FreshRSS_feed_Controller extends Minz_ActionController {
$feedDAO->updateLastUpdate ($feed->id (), 1);
}
+ $feed->unlock();
unset($feed);
// On arrête à 10 flux pour ne pas surcharger le serveur
diff --git a/app/Models/Feed.php b/app/Models/Feed.php
index e94ae2b3a..73f9c32fb 100644
--- a/app/Models/Feed.php
+++ b/app/Models/Feed.php
@@ -281,4 +281,22 @@ class FreshRSS_Feed extends Minz_Model {
$this->entries = $entries;
}
+
+ function lock() {
+ $lock = TMP_PATH . '/' . md5(Minz_Configuration::salt() . $this->url) . '.freshrss.lock';
+ if (file_exists($lock) && ((time() - @filemtime($lock)) > 3600)) {
+ @unlink($lock);
+ }
+ if (($handle = @fopen($lock, 'x')) === false) {
+ return false;
+ }
+ //register_shutdown_function('unlink', $lock);
+ @fclose($handle);
+ return true;
+ }
+
+ function unlock() {
+ $lock = TMP_PATH . '/' . md5(Minz_Configuration::salt() . $this->url) . '.freshrss.lock';
+ @unlink($lock);
+ }
}
diff --git a/app/actualize_script.php b/app/actualize_script.php
index bef9bd218..8d81e0189 100755
--- a/app/actualize_script.php
+++ b/app/actualize_script.php
@@ -1,24 +1,5 @@
<?php
require(dirname(__FILE__) . '/../constants.php');
-
-//<Mutex>
-$lock = DATA_PATH . '/actualize.lock.txt';
-if (file_exists($lock) && ((time() - @filemtime($lock)) > 3600)) {
- @unlink($lock);
-}
-if (($handle = @fopen($lock, 'x')) === false) {
- syslog(LOG_NOTICE, 'FreshRSS actualize already running?');
- if (defined('STDERR')) {
- fwrite(STDERR, 'FreshRSS actualize already running?' . "\n");
- }
- echo 'FreshRSS actualize already running?', "\n";
- return;
-}
-register_shutdown_function('unlink', $lock);
-//Could use http://php.net/function.pcntl-signal.php to catch interruptions
-@fclose($handle);
-//</Mutex>
-
require(LIB_PATH . '/lib_rss.php'); //Includes class autoloader
session_cache_limiter('');