/**
* Set up all member variables using a database query.
- * @param int $mode
+ * @param int $mode One of (Category::LOAD_ONLY, Category::LAZY_INIT_ROW)
* @throws MWException
* @return bool True on success, false on failure.
*/
$dbw->startAtomic( __METHOD__ );
+ // Lock the `category` row before locking `categorylinks` rows to try
+ // to avoid deadlocks with LinksDeletionUpdate (T195397)
+ $dbw->selectField(
+ 'category',
+ 1,
+ [ 'cat_title' => $this->mName ],
+ __METHOD__,
+ [ 'FOR UPDATE' ]
+ );
+
// Lock all the `categorylinks` records and gaps for this category;
// this is a separate query due to postgres/oracle limitations
$dbw->selectRowCount(