Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 0b7fc5c

Browse files
author
Vladimir Ershov
committed
dlsym with dlopen
1 parent 1d88e81 commit 0b7fc5c

File tree

1 file changed

+22
-4
lines changed

1 file changed

+22
-4
lines changed

src/scheduler_mtm.c

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,15 @@ Oid get_mtm_node_status_pkey_oid(void)
111111

112112
bool check_mtm_compatibility(void)
113113
{
114-
if(pg_dlsym(RTLD_DEFAULT, "MtmGetDisabledNodeMask")) return true;
114+
void *hanlder;
115+
116+
handler = pg_dlopen(NULL, RTLD_GLOBAL);
117+
if(pg_dlsym(handler, "MtmGetDisabledNodeMask"))
118+
{
119+
pg_dlclose(handler);
120+
return true;
121+
}
122+
pg_dlclose(handler);
115123
elog(WARNING, "The version of multimaster extension found is not compatiable with pgpro_scheduler. Pgpro_scheduler is functional but with some issues. Consider to upgrade multimaster.");
116124
return false;
117125
}
@@ -179,9 +187,12 @@ set_state(PG_FUNCTION_ARGS)
179187
nodemask_t call_MtmGetDisabledNodeMask(void)
180188
{
181189
void *ptr;
190+
void *handler;
182191

183192
if(fptr_MtmGetDisabledNodeMask) (*fptr_MtmGetDisabledNodeMask)();
184-
ptr = pg_dlsym(RTLD_DEFAULT, "MtmGetDisabledNodeMask");
193+
handler = pg_dlopen(NULL, RTLD_GLOBAL);
194+
ptr = pg_dlsym(handler, "MtmGetDisabledNodeMask");
195+
pg_dlclose(handler);
185196
if(ptr)
186197
{
187198
fptr_MtmGetDisabledNodeMask = (nodemask_t (*)(void))ptr;
@@ -196,9 +207,12 @@ nodemask_t call_MtmGetDisabledNodeMask(void)
196207
MtmNodeStatus call_MtmGetCurrentStatus(void)
197208
{
198209
void *ptr;
210+
void *handler;
199211

200212
if(fptr_MtmGetCurrentStatus) (*fptr_MtmGetCurrentStatus)();
201-
ptr = pg_dlsym(RTLD_DEFAULT, "MtmGetCurrentStatus");
213+
handler = pg_dlopen(NULL, RTLD_GLOBAL);
214+
ptr = pg_dlsym(handler, "MtmGetCurrentStatus");
215+
pg_close(handler);
202216
if(ptr)
203217
{
204218
fptr_MtmGetCurrentStatus = (MtmNodeStatus (*)(void))ptr;
@@ -217,7 +231,11 @@ void call_MtmToggleDML(void)
217231
void *ptr;
218232

219233
if(fptr_MtmToggleDML) (*fptr_MtmToggleDML)();
220-
ptr = pg_dlsym(RTLD_DEFAULT, "MtmToggleDML");
234+
235+
handler = pg_dlopen(NULL, RTLD_GLOBAL);
236+
ptr = pg_dlsym(handler, "MtmToggleDML");
237+
pg_dlclose(handler);
238+
221239
if(ptr)
222240
{
223241
fptr_MtmToggleDML = (void (*)(void))ptr;

0 commit comments

Comments
 (0)