$this->initLanguage( $code );
}
// Check to see if initLanguage() loaded it for us
- if ( isset( $this->loadedSubitems[$code][$key][$subkey] ) ) {
+ if ( isset( $this->loadedItems[$code][$key] )
+ || isset( $this->loadedSubitems[$code][$key][$subkey] ) )
+ {
return;
}
if ( isset( $this->shallowFallbacks[$code] ) ) {
*/
protected function readPHPFile( $_fileName, $_fileType ) {
// Disable APC caching
- $_apcEnabled = ini_set( 'apc.enabled', '0' );
+ $_apcEnabled = ini_set( 'apc.cache_by_default', '0' );
include( $_fileName );
- ini_set( 'apc.enabled', $_apcEnabled );
+ ini_set( 'apc.cache_by_default', $_apcEnabled );
if ( $_fileType == 'core' || $_fileType == 'extension' ) {
$data = compact( self::$allKeys );
$data = $this->readPHPFile( $fileName, 'extension' );
$used = false;
foreach ( $data as $key => $item ) {
- $used = $used |
- $this->mergeExtensionItem( $codeSequence, $key, $allData[$key], $item );
+ if( $this->mergeExtensionItem( $codeSequence, $key, $allData[$key], $item ) ) {
+ $used = true;
+ }
}
if ( $used ) {
$deps[] = new FileDependency( $fileName );
*/
public function disableBackend() {
$this->store = new LCStore_Null;
+ $this->manualRecache = false;
}
}
var $currentLang;
var $writesDone = false;
var $dbw, $batch;
+ var $readOnly = false;
public function get( $code, $key ) {
if ( $this->writesDone ) {
}
public function startWrite( $code ) {
+ if ( $this->readOnly ) {
+ return;
+ }
if ( !$code ) {
throw new MWException( __METHOD__.": Invalid language \"$code\"" );
}
$this->dbw = wfGetDB( DB_MASTER );
- $this->dbw->begin();
- $this->dbw->delete( 'l10n_cache', array( 'lc_lang' => $code ), __METHOD__ );
+ try {
+ $this->dbw->begin();
+ $this->dbw->delete( 'l10n_cache', array( 'lc_lang' => $code ), __METHOD__ );
+ } catch ( DBQueryError $e ) {
+ if ( $this->dbw->wasReadOnlyError() ) {
+ $this->readOnly = true;
+ $this->dbw->rollback();
+ $this->dbw->ignoreErrors( false );
+ return;
+ } else {
+ throw $e;
+ }
+ }
$this->currentLang = $code;
$this->batch = array();
}
public function finishWrite() {
+ if ( $this->readOnly ) {
+ return;
+ }
if ( $this->batch ) {
$this->dbw->insert( 'l10n_cache', $this->batch, __METHOD__ );
}
}
public function set( $key, $value ) {
+ if ( $this->readOnly ) {
+ return;
+ }
if ( is_null( $this->currentLang ) ) {
throw new MWException( __CLASS__.': must call startWrite() before calling set()' );
}
"directory \"{$this->directory}\"" );
}
}
+ // Close reader to stop permission errors on write
+ if( !empty($this->readers[$code]) ) {
+ $this->readers[$code]->close();
+ }
$this->writer = CdbWriter::open( $this->getFileName( $code ) );
$this->currentLang = $code;
}
// Close the writer
$this->writer->close();
$this->writer = null;
-
- // Reopen the reader
- if ( !empty( $this->readers[$this->currentLang] ) ) {
- $this->readers[$this->currentLang]->close();
- }
unset( $this->readers[$this->currentLang] );
$this->currentLang = null;
}