diff options
author | David Rothstein <drothstein@gmail.com> | 2014-11-03 11:02:10 -0500 |
---|---|---|
committer | David Rothstein <drothstein@gmail.com> | 2014-11-03 11:02:10 -0500 |
commit | af4cde1b8fc393c16051ffc275acf94371c68236 (patch) | |
tree | 0391b66c3277cc8f55b037dc8cedd8d8ac9ed964 /modules | |
parent | c401ec33e847ec2710ef6914625ca63a3e5663b4 (diff) | |
download | brdo-af4cde1b8fc393c16051ffc275acf94371c68236.tar.gz brdo-af4cde1b8fc393c16051ffc275acf94371c68236.tar.bz2 |
Issue #2193149 by mikeytown2: Fixed Deadlocks occur in cache_field table.
Diffstat (limited to 'modules')
-rw-r--r-- | modules/field/field.info.class.inc | 26 | ||||
-rw-r--r-- | modules/field/field.info.inc | 6 |
2 files changed, 26 insertions, 6 deletions
diff --git a/modules/field/field.info.class.inc b/modules/field/field.info.class.inc index 3b89898fb..f4f1f6300 100644 --- a/modules/field/field.info.class.inc +++ b/modules/field/field.info.class.inc @@ -146,7 +146,10 @@ class FieldInfo { // Save in "static" and persistent caches. $this->fieldMap = $map; - cache_set('field_info:field_map', $map, 'cache_field'); + if (lock_acquire('field_info:field_map')) { + cache_set('field_info:field_map', $map, 'cache_field'); + lock_release('field_info:field_map'); + } return $map; } @@ -174,7 +177,10 @@ class FieldInfo { } // Store in persistent cache. - cache_set('field_info:fields', $this->fieldsById, 'cache_field'); + if (lock_acquire('field_info:fields')) { + cache_set('field_info:fields', $this->fieldsById, 'cache_field'); + lock_release('field_info:fields'); + } } // Fill the name/ID map. @@ -231,7 +237,10 @@ class FieldInfo { } // Store in persistent cache. - cache_set('field_info:instances', $this->bundleInstances, 'cache_field'); + if (lock_acquire('field_info:instances')) { + cache_set('field_info:instances', $this->bundleInstances, 'cache_field'); + lock_release('field_info:instances'); + } } $this->loadedAllInstances = TRUE; @@ -419,7 +428,11 @@ class FieldInfo { foreach ($instances as $instance) { $cache['fields'][] = $this->fieldsById[$instance['field_id']]; } - cache_set("field_info:bundle:$entity_type:$bundle", $cache, 'cache_field'); + + if (lock_acquire("field_info:bundle:$entity_type:$bundle")) { + cache_set("field_info:bundle:$entity_type:$bundle", $cache, 'cache_field'); + lock_release("field_info:bundle:$entity_type:$bundle"); + } return $instances; } @@ -460,7 +473,10 @@ class FieldInfo { // Store in the 'static' and persistent caches. $this->bundleExtraFields[$entity_type][$bundle] = $info; - cache_set("field_info:bundle_extra:$entity_type:$bundle", $info, 'cache_field'); + if (lock_acquire("field_info:bundle_extra:$entity_type:$bundle")) { + cache_set("field_info:bundle_extra:$entity_type:$bundle", $info, 'cache_field'); + lock_release("field_info:bundle_extra:$entity_type:$bundle"); + } return $this->bundleExtraFields[$entity_type][$bundle]; } diff --git a/modules/field/field.info.inc b/modules/field/field.info.inc index 02b3c9ca4..dea2fd4fb 100644 --- a/modules/field/field.info.inc +++ b/modules/field/field.info.inc @@ -223,7 +223,11 @@ function _field_info_collate_types($reset = FALSE) { } drupal_alter('field_storage_info', $info['storage types']); - cache_set("field_info_types:$langcode", $info, 'cache_field'); + // Set the cache if we can acquire a lock. + if (lock_acquire("field_info_types:$langcode")) { + cache_set("field_info_types:$langcode", $info, 'cache_field'); + lock_release("field_info_types:$langcode"); + } } } |