59
59
#define Anum_mtm_local_tables_rel_schema 1
60
60
#define Anum_mtm_local_tables_rel_name 2
61
61
62
+ struct DDLSharedState
63
+ {
64
+ LWLock * localtab_lock ;
65
+ } * ddl_shared ;
62
66
63
67
typedef struct MtmGucEntry
64
68
{
@@ -86,7 +90,6 @@ static bool DDLApplyInProgress;
86
90
static HTAB * MtmGucHash = NULL ;
87
91
static dlist_head MtmGucList = DLIST_STATIC_INIT (MtmGucList );
88
92
89
- static LWLock * MtmLocalTablesMapLock ;
90
93
static HTAB * MtmRemoteFunctions ;
91
94
static HTAB * MtmLocalTables ;
92
95
@@ -137,6 +140,7 @@ MtmDDLReplicationInit()
137
140
{
138
141
Size size = 0 ;
139
142
143
+ size = add_size (size , sizeof (struct DDLSharedState ));
140
144
size = add_size (size , hash_estimate_size (MULTIMASTER_MAX_LOCAL_TABLES ,
141
145
sizeof (Oid )));
142
146
size = MAXALIGN (size );
@@ -161,14 +165,22 @@ MtmDDLReplicationInit()
161
165
void
162
166
MtmDDLReplicationShmemStartup (void )
163
167
{
164
- HASHCTL info ;
168
+ HASHCTL info ;
169
+ bool found ;
165
170
166
171
memset (& info , 0 , sizeof (info ));
167
172
info .entrysize = info .keysize = sizeof (Oid );
168
173
169
174
LWLockAcquire (AddinShmemInitLock , LW_EXCLUSIVE );
170
175
171
- MtmLocalTablesMapLock = & (GetNamedLWLockTranche ("mtm-ddl" ))-> lock ;
176
+ ddl_shared = ShmemInitStruct ("ddl" ,
177
+ sizeof (struct DDLSharedState ),
178
+ & found );
179
+
180
+ if (!found )
181
+ {
182
+ ddl_shared -> localtab_lock = & (GetNamedLWLockTranche ("mtm-ddl" ))-> lock ;
183
+ }
172
184
173
185
MtmLocalTables = ShmemInitHash ("MtmLocalTables" ,
174
186
MULTIMASTER_MAX_LOCAL_TABLES , MULTIMASTER_MAX_LOCAL_TABLES ,
@@ -1237,9 +1249,9 @@ MtmMakeRelationLocal(Oid relid)
1237
1249
{
1238
1250
if (OidIsValid (relid ))
1239
1251
{
1240
- LWLockAcquire (MtmLocalTablesMapLock , LW_EXCLUSIVE );
1252
+ LWLockAcquire (ddl_shared -> localtab_lock , LW_EXCLUSIVE );
1241
1253
hash_search (MtmLocalTables , & relid , HASH_ENTER , NULL );
1242
- LWLockRelease (MtmLocalTablesMapLock );
1254
+ LWLockRelease (ddl_shared -> localtab_lock );
1243
1255
}
1244
1256
}
1245
1257
@@ -1282,11 +1294,11 @@ MtmIsRelationLocal(Relation rel)
1282
1294
{
1283
1295
bool found ;
1284
1296
1285
- LWLockAcquire (MtmLocalTablesMapLock , LW_SHARED );
1297
+ LWLockAcquire (ddl_shared -> localtab_lock , LW_SHARED );
1286
1298
if (!Mtm -> localTablesHashLoaded )
1287
1299
{
1288
- LWLockRelease (MtmLocalTablesMapLock );
1289
- LWLockAcquire (MtmLocalTablesMapLock , LW_EXCLUSIVE );
1300
+ LWLockRelease (ddl_shared -> localtab_lock );
1301
+ LWLockAcquire (ddl_shared -> localtab_lock , LW_EXCLUSIVE );
1290
1302
if (!Mtm -> localTablesHashLoaded )
1291
1303
{
1292
1304
MtmLoadLocalTables ();
@@ -1295,7 +1307,7 @@ MtmIsRelationLocal(Relation rel)
1295
1307
}
1296
1308
1297
1309
hash_search (MtmLocalTables , & RelationGetRelid (rel ), HASH_FIND , & found );
1298
- LWLockRelease (MtmLocalTablesMapLock );
1310
+ LWLockRelease (ddl_shared -> localtab_lock );
1299
1311
1300
1312
return found ;
1301
1313
}
0 commit comments