@@ -78,6 +78,8 @@ load_config(void)
78
78
Oid * databases ;
79
79
80
80
initialization_needed = false;
81
+
82
+ LWLockAcquire (pmstate -> dsm_init_lock ,LW_EXCLUSIVE );
81
83
new_segment_created = init_dsm_segment (INITIAL_BLOCKS_COUNT ,32 );
82
84
83
85
/* If dsm segment just created */
@@ -88,29 +90,22 @@ load_config(void)
88
90
* oid into it. This array contains databases oids
89
91
* that have already been cached (to prevent repeat caching)
90
92
*/
91
- LWLockAcquire (pmstate -> dsm_init_lock ,LW_EXCLUSIVE );
92
-
93
93
if (& pmstate -> databases .length > 0 )
94
94
free_dsm_array (& pmstate -> databases );
95
95
alloc_dsm_array (& pmstate -> databases ,sizeof (Oid ),1 );
96
96
databases = (Oid * )dsm_array_get_pointer (& pmstate -> databases );
97
97
databases [0 ]= MyDatabaseId ;
98
-
99
- LWLockRelease (pmstate -> dsm_init_lock );
100
98
}
101
99
else
102
100
{
103
101
int databases_count = pmstate -> databases .length ;
104
102
int i ;
105
103
106
104
/* Check if we already cached config for current database */
107
- LWLockAcquire (pmstate -> dsm_init_lock ,LW_EXCLUSIVE );
108
-
109
105
databases = (Oid * )dsm_array_get_pointer (& pmstate -> databases );
110
106
for (i = 0 ;i < databases_count ;i ++ )
111
107
if (databases [i ]== MyDatabaseId )
112
108
{
113
- // LWLockRelease(pmstate->load_config_lock);
114
109
LWLockRelease (pmstate -> dsm_init_lock );
115
110
return ;
116
111
}
@@ -119,14 +114,13 @@ load_config(void)
119
114
resize_dsm_array (& pmstate -> databases ,sizeof (Oid ),databases_count + 1 );
120
115
databases = (Oid * )dsm_array_get_pointer (& pmstate -> databases );
121
116
databases [databases_count ]= MyDatabaseId ;
122
-
123
- LWLockRelease (pmstate -> dsm_init_lock );
124
117
}
125
118
126
119
/* Load cache */
127
120
LWLockAcquire (pmstate -> load_config_lock ,LW_EXCLUSIVE );
128
121
load_relations_hashtable (new_segment_created );
129
122
LWLockRelease (pmstate -> load_config_lock );
123
+ LWLockRelease (pmstate -> dsm_init_lock );
130
124
}
131
125
132
126
/*