]> git.wh0rd.org Git - tt-rss.git/commitdiff
better handle PDOExceptions during open transaction in feed update
authorAndrew Dolgov <noreply@fakecake.org>
Sat, 3 Nov 2018 12:00:58 +0000 (15:00 +0300)
committerAndrew Dolgov <noreply@fakecake.org>
Sat, 3 Nov 2018 12:00:58 +0000 (15:00 +0300)
classes/rssutils.php

index 094b294084f2b8509c70cbbc7199b692a84852cd..3c49ef1e4acdab57b0d289dd7e8727472495e0b2 100755 (executable)
@@ -50,8 +50,8 @@ class RSSUtils {
                        if (!$tmph->fetch()) {
 
                                $tmph = $pdo->prepare("INSERT INTO ttrss_feedbrowser_cache
-                                       (feed_url, site_url, title, subscribers) 
-                                       VALUES 
+                                       (feed_url, site_url, title, subscribers)
+                                       VALUES
                                        (?, ?, ?, ?)");
 
                                $tmph->execute([$feed_url, $site_url, $title, $subscribers]);
@@ -192,6 +192,13 @@ class RSSUtils {
                                        RSSUtils::update_rss_feed($tline["id"], true, false);
                                } catch (PDOException $e) {
                                        Logger::get()->log_error(E_USER_NOTICE, $e->getMessage(), $e->getFile(), $e->getLine(), $e->getTraceAsString());
+
+                                       try {
+                                               $pdo->rollback();
+                                       } catch (PDOException $e) {
+                                               // it doesn't matter if there wasn't actually anything to rollback, PDO Exception can be
+                                               // thrown outside of an active transaction during feed update
+                                       }
                                }
                                _debug_suppress(false);
 
@@ -333,12 +340,12 @@ class RSSUtils {
                $sth = $pdo->prepare("SELECT id,update_interval,auth_login,
                        feed_url,auth_pass,cache_images,
                        mark_unread_on_update, owner_uid,
-                       auth_pass_encrypted, feed_language, 
-                       last_modified, 
-                       ".SUBSTRING_FOR_DATE."(last_unconditional, 1, 19) AS last_unconditional                 
+                       auth_pass_encrypted, feed_language,
+                       last_modified,
+                       ".SUBSTRING_FOR_DATE."(last_unconditional, 1, 19) AS last_unconditional
                        FROM ttrss_feeds WHERE id = ?");
                $sth->execute([$feed]);
-               
+
                if ($row = $sth->fetch()) {
 
                        $owner_uid = $row["owner_uid"];
@@ -852,7 +859,7 @@ class RSSUtils {
 
                                        $usth = $pdo->prepare(
                                                "INSERT INTO ttrss_entries
-                                                       (title, 
+                                                       (title,
                                                        guid,
                                                        link,
                                                        updated,
@@ -921,7 +928,7 @@ class RSSUtils {
 
                                                _debug("user record FOUND: RID: $entry_ref_id, IID: $entry_int_id", $debug_enabled);
                                        } else {
-                                               
+
                                                _debug("user record not found, creating...", $debug_enabled);
 
                                                if ($score >= -500 && !RSSUtils::find_article_filter($article_filters, 'catchup') && !$entry_force_catchup) {
@@ -984,7 +991,7 @@ class RSSUtils {
                                                        num_comments = :num_comments,
                                                        plugin_data = :plugin_data,
                                                        author = :author,
-                                                       lang = :lang                                                                                                            
+                                                       lang = :lang
                                                WHERE id = :id");
 
                                        $params = [":title" => $entry_title,