http://www.mediawiki.org/wiki/Special:Code/MediaWiki/84435
Revision: 84435
Author: aaron
Date: 2011-03-21 00:10:41 +0000 (Mon, 21 Mar 2011)
Log Message:
-----------
Timeout/locking fixes for r84383 (these don't do anything yet though anyway)
Modified Paths:
--------------
trunk/extensions/FlaggedRevs/FRUserActivity.php
Modified: trunk/extensions/FlaggedRevs/FRUserActivity.php
===================================================================
--- trunk/extensions/FlaggedRevs/FRUserActivity.php 2011-03-21 00:04:18 UTC
(rev 84434)
+++ trunk/extensions/FlaggedRevs/FRUserActivity.php 2011-03-21 00:10:41 UTC
(rev 84435)
@@ -64,24 +64,35 @@
global $wgMemc;
$key = wfMemcKey( 'flaggedrevs', 'userReviewingPage', $pageId );
$val = array( $user->getName(), wfTimestampNow() );
+ $wasSet = false;
+
+ $wgMemc->lock( $key, 4 ); // 4 sec timeout
if ( !$wgMemc->get( $key ) ) { // no flag set
- # Set the flag (use locks if available)
- $wgMemc->lock( $key, 4000 ); // 4 sec timeout
$wgMemc->set( $key, $val, 20*60 ); // 20 min
- $wgMemc->unlock( $key );
- return true;
+ $wasSet = true;
}
- return false;
+ $wgMemc->unlock( $key );
+
+ return $wasSet;
}
/*
* Clear the flag for who is reviewing a page
+ * @param User $user
* @param int $pageId
*/
- public static function clearUserReviewingPage( $pageId ) {
+ public static function clearUserReviewingPage( $user, $pageId ) {
global $wgMemc;
$key = wfMemcKey( 'flaggedrevs', 'userReviewingPage', $pageId );
- $wgMemc->delete( $key );
+ $wgMemc->lock( $key, 4 ); // 4 sec timeout
+ $val = $wgMemc->get( $key );
+ if ( is_array( $val ) && count( $val ) == 2 ) { // flag set
+ list( $u, $ts ) = $val;
+ if ( $u === $user->getName() ) {
+ $wgMemc->delete( $key );
+ }
+ }
+ $this->unlock();
}
/*
@@ -110,23 +121,35 @@
global $wgMemc;
$key = wfMemcKey( 'flaggedrevs', 'userReviewingDiff', $oldId,
$newId );
$val = array( $user->getName(), wfTimestampNow() );
+ $wasSet = false;
+
+ $wgMemc->lock( $key, 4 ); // 4 sec timeout
if ( !$wgMemc->get( $key ) ) { // no flag set
- # Set the flag (use locks if available)
- $wgMemc->lock( $key, 4000 ); // 4 sec timeout
$wgMemc->set( $key, $val, 6*20 ); // 6 min
- $wgMemc->unlock( $key );
- return true;
+ $wasSet = true;
}
- return false;
+ $wgMemc->unlock( $key );
+
+ return $wasSet;
}
/*
* Clear the flag for who is reviewing a diff
- * @param int $pageId
+ * @param User $user
+ * @param int $oldId
+ * @param int $newId
*/
- public static function clearUserReviewingDiff( $oldId, $newId ) {
+ public static function clearUserReviewingDiff( $user, $oldId, $newId ) {
global $wgMemc;
$key = wfMemcKey( 'flaggedrevs', 'userReviewingDiff', $oldId,
$newId );
- $wgMemc->delete( $key );
+ $wgMemc->lock( $key, 4 ); // 4 sec timeout
+ $val = $wgMemc->get( $key );
+ if ( is_array( $val ) && count( $val ) == 2 ) { // flag set
+ list( $u, $ts ) = $val;
+ if ( $u === $user->getName() ) {
+ $wgMemc->delete( $key );
+ }
+ }
+ $this->unlock();
}
}
_______________________________________________
MediaWiki-CVS mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs