diff --git a/includes/commerce.controller.inc b/sites/all/modules/contrib/commerce/includes/commerce.controller.inc index 4e6249c..c60be2e 100644 --- a/includes/commerce.controller.inc +++ b/includes/commerce.controller.inc @@ -24,11 +24,17 @@ class DrupalCommerceEntityController extends DrupalDefaultEntityController imple * Override of DrupalDefaultEntityController::buildQuery(). * * Handle pessimistic locking. + * + * To load the order without locking, pass 'lock' => FALSE in the conditions array. */ protected function buildQuery($ids, $conditions = array(), $revision_id = FALSE) { $query = parent::buildQuery($ids, $conditions, $revision_id); - if (isset($this->entityInfo['locking mode']) && $this->entityInfo['locking mode'] == 'pessimistic') { + $use_locking = isset($conditions['lock']) ? $conditions['lock'] : TRUE; + unset($conditions['lock']); + if (isset($this->entityInfo['locking mode']) + && $this->entityInfo['locking mode'] == 'pessimistic' && $use_locking) { + // In pessimistic locking mode, we issue the load query with a FOR UPDATE // clause. This will block all other load queries to the loaded objects // but requires us to start a transaction. diff --git a/sites/all/modules/contrib/commerce/modules/order/commerce_order.module b/sites/all/modules/contrib/commerce/modules/order/commerce_order.module index a14307d..5d2b3ec 100644 --- a/sites/all/modules/contrib/commerce/modules/order/commerce_order.module +++ b/sites/all/modules/contrib/commerce/modules/order/commerce_order.module @@ -745,8 +745,8 @@ function commerce_order_save($order) { /** * Loads an order by ID. */ -function commerce_order_load($order_id) { - $orders = commerce_order_load_multiple(array($order_id), array()); +function commerce_order_load($order_id, $conditions = array()) { + $orders = commerce_order_load_multiple(array($order_id), $conditions); return $orders ? reset($orders) : FALSE; }