Fix link cache use with FOR_UPDATE
authorAaron Schulz <aaron@users.mediawiki.org>
Sun, 7 Sep 2008 08:24:06 +0000 (08:24 +0000)
committerAaron Schulz <aaron@users.mediawiki.org>
Sun, 7 Sep 2008 08:24:06 +0000 (08:24 +0000)
includes/LinkCache.php
includes/Title.php

index d3cafac..4f74cdd 100644 (file)
@@ -89,8 +89,18 @@ class LinkCache {
                unset( $this->mBadLinks[$title] );
        }
 
-       /* obsolete, for old $wgLinkCacheMemcached stuff */
-       public function clearLink( $title ) {}
+       public function clearLink( $title ) {
+               $dbkey = $title->getPrefixedDbKey();
+               if( isset($this->mBadLinks[$dbkey]) ) {
+                       unset($this->mBadLinks[$dbkey]);
+               }
+               if( isset($this->mGoodLinks[$dbkey]) ) {
+                       unset($this->mGoodLinks[$dbkey]);
+               }
+               if( isset($this->mGoodLinkFields[$dbkey]) ) {
+                       unset($this->mGoodLinkFields[$dbkey]);
+               }
+       }
 
        public function getGoodLinks() { return $this->mGoodLinks; }
        public function getBadLinks() { return array_keys( $this->mBadLinks ); }
index 18704c6..5ef8507 100644 (file)
@@ -1921,12 +1921,13 @@ class Title {
         */
        public function getArticleID( $flags = 0 ) {
                $linkCache = LinkCache::singleton();
-               if ( $flags & GAID_FOR_UPDATE ) {
+               if( $flags & GAID_FOR_UPDATE ) {
                        $oldUpdate = $linkCache->forUpdate( true );
+                       $linkCache->clearLink( $this );
                        $this->mArticleID = $linkCache->addLinkObj( $this );
                        $linkCache->forUpdate( $oldUpdate );
                } else {
-                       if ( -1 == $this->mArticleID ) {
+                       if( -1 == $this->mArticleID ) {
                                $this->mArticleID = $linkCache->addLinkObj( $this );
                        }
                }