@@ -78,6 +78,8 @@ load_config(void)
7878Oid * databases ;
7979
8080initialization_needed = false;
81+
82+ LWLockAcquire (pmstate -> dsm_init_lock ,LW_EXCLUSIVE );
8183new_segment_created = init_dsm_segment (INITIAL_BLOCKS_COUNT ,32 );
8284
8385/* If dsm segment just created */
@@ -88,29 +90,22 @@ load_config(void)
8890 * oid into it. This array contains databases oids
8991 * that have already been cached (to prevent repeat caching)
9092 */
91- LWLockAcquire (pmstate -> dsm_init_lock ,LW_EXCLUSIVE );
92-
9393if (& pmstate -> databases .length > 0 )
9494free_dsm_array (& pmstate -> databases );
9595alloc_dsm_array (& pmstate -> databases ,sizeof (Oid ),1 );
9696databases = (Oid * )dsm_array_get_pointer (& pmstate -> databases );
9797databases [0 ]= MyDatabaseId ;
98-
99- LWLockRelease (pmstate -> dsm_init_lock );
10098}
10199else
102100{
103101int databases_count = pmstate -> databases .length ;
104102int i ;
105103
106104/* Check if we already cached config for current database */
107- LWLockAcquire (pmstate -> dsm_init_lock ,LW_EXCLUSIVE );
108-
109105databases = (Oid * )dsm_array_get_pointer (& pmstate -> databases );
110106for (i = 0 ;i < databases_count ;i ++ )
111107if (databases [i ]== MyDatabaseId )
112108{
113- // LWLockRelease(pmstate->load_config_lock);
114109LWLockRelease (pmstate -> dsm_init_lock );
115110return ;
116111}
@@ -119,14 +114,13 @@ load_config(void)
119114resize_dsm_array (& pmstate -> databases ,sizeof (Oid ),databases_count + 1 );
120115databases = (Oid * )dsm_array_get_pointer (& pmstate -> databases );
121116databases [databases_count ]= MyDatabaseId ;
122-
123- LWLockRelease (pmstate -> dsm_init_lock );
124117}
125118
126119/* Load cache */
127120LWLockAcquire (pmstate -> load_config_lock ,LW_EXCLUSIVE );
128121load_relations_hashtable (new_segment_created );
129122LWLockRelease (pmstate -> load_config_lock );
123+ LWLockRelease (pmstate -> dsm_init_lock );
130124}
131125
132126/*