Browse Source

Fix coroipcc linking

Fixes rhbz#499918
	
Functions from ckpt library (like aCkptCheckpointOpen,
saCkptSectionIterationInitialize, ...) internally uses corosync functions
reply_receive, reply_receive_in_buf, ... This functions are included in
coroipcc.c source file and uses global static variable ipc_hdb.

Without patch, coroipcc is linked to shared library (libcoroipcc.so) AND linked
with every corosync libraries (like cpg, ....), so global variable ipc_hdb is
included not only in libcoroipcc.so, but also in libcpg.so, ...

dlm_controld has function retrieve_plocks, and whole binary is linked with
libcoroipcc and libcpg. So ipc_hdb is included TWICE (so has TWO addresses).

Main problem causing the bug was, that reply_receive uses address from one
library, and reply_receive_in_buf uses other. This confuses check of hdb_get
function.

After removing linking of coroipcc.o to cpg, and rather use of dynamic version,
 (this means, there is only one instance of ipc_hdb) problem disappeared.



git-svn-id: http://svn.fedorahosted.org/svn/corosync/trunk@2203 fd59a12c-fef9-0310-b244-a6a79926bd2f
Jan Friesse 16 năm trước cách đây
mục cha
commit
8605bbc7b2
3 tập tin đã thay đổi với 28 bổ sung28 xóa
  1. 11 11
      lib/Makefile.am
  2. 14 14
      test/Makefile.am
  3. 3 3
      tools/Makefile.am

+ 11 - 11
lib/Makefile.am

@@ -44,13 +44,13 @@ SHARED_LIBS		= $(lib_LIBRARIES:%.a=%.so.$(SONAME))
 SHARED_LIBS_SO		= $(lib_LIBRARIES:%.a=%.so)
 SHARED_LIBS_SO_TWO	= $(lib_LIBRARIES:%.a=%.so.$(SOMAJOR))
 
-libcpg_a_SOURCES	= coroipcc.c cpg.c
-libcfg_a_SOURCES	= coroipcc.c cfg.c
-libevs_a_SOURCES	= coroipcc.c evs.c
-libpload_a_SOURCES	= coroipcc.c pload.c
-libquorum_a_SOURCES	= coroipcc.c quorum.c
-libvotequorum_a_SOURCES	= coroipcc.c votequorum.c
-libconfdb_a_SOURCES	= coroipcc.c confdb.c sa-confdb.c
+libcpg_a_SOURCES	= cpg.c
+libcfg_a_SOURCES	= cfg.c
+libevs_a_SOURCES	= evs.c
+libpload_a_SOURCES	= pload.c
+libquorum_a_SOURCES	= quorum.c
+libvotequorum_a_SOURCES	= votequorum.c
+libconfdb_a_SOURCES	= confdb.c sa-confdb.c
 libcoroipcc_a_SOURCES	= coroipcc.c
 
 noinst_HEADERS		= sa-confdb.h util.h \
@@ -69,13 +69,13 @@ libcoroipcc.so.$(SONAME): coroipcc.o
 	ln -sf libcoroipcc.so.$(SONAME) libcoroipcc.so
 	ln -sf libcoroipcc.so.$(SONAME) libcoroipcc.so.$(SOMAJOR)
 
-libconfdb.so.$(SONAME): coroipcc.o confdb.o sa-confdb.o
+libconfdb.so.$(SONAME): confdb.o sa-confdb.o libcoroipcc.so.$(SONAME)
 	$(CC) $(LDFLAGS) $(DARWIN_OPTS) coroipcc.o confdb.o \
 		sa-confdb.o ../lcr/lcr_ifact.o -o $@ -ldl $(AM_LDFLAGS)
 	ln -sf libconfdb.so.$(SONAME) libconfdb.so
 	ln -sf libconfdb.so.$(SONAME) libconfdb.so.$(SOMAJOR)
 
-lib%.so.$(SONAME): coroipcc.o %.o
+lib%.so.$(SONAME): %.o libcoroipcc.so.$(SONAME)
 	$(CC) $(DARWIN_OPTS) $^ -o $@
 	ln -sf lib$*.so.$(SONAME) lib$*.so
 	ln -sf lib$*.so.$(SONAME) lib$*.so.$(SOMAJOR)
@@ -90,7 +90,7 @@ libcoroipcc.so.$(SONAME): coroipcc.o
 	ln -sf libcoroipcc.so.$(SONAME) libcoroipcc.so
 	ln -sf libcoroipcc.so.$(SONAME) libcoroipcc.so.$(SOMAJOR)
 
-libconfdb.so.$(SONAME): coroipcc.o confdb.o sa-confdb.o ../lcr/lcr_ifact.o
+libconfdb.so.$(SONAME): confdb.o sa-confdb.o ../lcr/lcr_ifact.o libcoroipcc.so.$(SONAME)
 	$(CC) -shared -o $@ \
 		-Wl,-soname=libconfdb.so.$(SOMAJOR) \
 		-Wl,-version-script=$(srcdir)/libconfdb.versions \
@@ -98,7 +98,7 @@ libconfdb.so.$(SONAME): coroipcc.o confdb.o sa-confdb.o ../lcr/lcr_ifact.o
 	ln -sf libconfdb.so.$(SONAME) libconfdb.so
 	ln -sf libconfdb.so.$(SONAME) libconfdb.so.$(SOMAJOR)
 
-lib%.so.$(SONAME): coroipcc.o %.o
+lib%.so.$(SONAME): %.o libcoroipcc.so.$(SONAME)
 	$(CC) -shared -o $@ \
 		-Wl,-soname=lib$*.so.$(SOMAJOR) \
 		-Wl,-version-script=$(srcdir)/lib$*.versions \

+ 14 - 14
test/Makefile.am

@@ -37,33 +37,33 @@ noinst_PROGRAMS		= testevs evsbench evsverify cpgverify testcpg testcpg2 cpgbenc
 			logsysbench logsysrec testquorum testvotequorum1 testvotequorum2	\
 			logsys_s logsys_t1 logsys_t2 testcpgzc cpgbenchzc testzcgc
 
-testevs_LDADD		= -levs
+testevs_LDADD		= -levs -lcoroipcc
 testevs_LDFLAGS		= -L../lib
-testcpg_LDADD		= -lcpg
+testcpg_LDADD		= -lcpg -lcoroipcc
 testcpg_LDFLAGS		= -L../lib
-testcpg2_LDADD		= -lcpg
+testcpg2_LDADD		= -lcpg -lcoroipcc
 testcpg2_LDFLAGS	= -L../lib
-testcpgzc_LDADD		= -lcpg
+testcpgzc_LDADD		= -lcpg -lcoroipcc
 testcpgzc_LDFLAGS	= -L../lib
-testzcgc_LDADD		= -lcpg
+testzcgc_LDADD		= -lcpg -lcoroipcc
 testzcgc_LDFLAGS	= -L../lib
-testconfdb_LDADD	= -lconfdb ../lcr/liblcr.a
+testconfdb_LDADD	= -lconfdb ../lcr/liblcr.a -lcoroipcc
 testconfdb_LDFLAGS	= -L../lib
-testquorum_LDADD	= -lquorum
+testquorum_LDADD	= -lquorum -lcoroipcc
 testquorum_LDFLAGS	= -L../lib
-testvotequorum1_LDADD	= -lvotequorum
+testvotequorum1_LDADD	= -lvotequorum -lcoroipcc
 testvotequorum1_LDFLAGS	= -L../lib
-testvotequorum2_LDADD	= -lvotequorum
+testvotequorum2_LDADD	= -lvotequorum -lcoroipcc
 testvotequorum2_LDFLAGS	= -L../lib
-evsverify_LDADD		= -levs -ltotem_pg
+evsverify_LDADD		= -levs -ltotem_pg -lcoroipcc
 evsverify_LDFLAGS	= -L../lib -L../exec
-cpgverify_LDADD		= -lcpg -ltotem_pg
+cpgverify_LDADD		= -lcpg -ltotem_pg -lcoroipcc
 cpgverify_LDFLAGS	= -L../lib -L../exec
-evsbench_LDADD		= -levs
+evsbench_LDADD		= -levs -lcoroipcc
 evsbench_LDFLAGS	= -L../lib
-cpgbench_LDADD		= -lcpg
+cpgbench_LDADD		= -lcpg -lcoroipcc
 cpgbench_LDFLAGS	= -L../lib
-cpgbenchzc_LDADD	= -lcpg
+cpgbenchzc_LDADD	= -lcpg -lcoroipcc
 cpgbenchzc_LDFLAGS	= -L../lib
 logsysbench_LDADD	= -llogsys
 logsysbench_LDFLAGS	= -L../exec

+ 3 - 3
tools/Makefile.am

@@ -36,9 +36,9 @@ sbin_PROGRAMS		= corosync-fplay corosync-cfgtool \
 			  corosync-keygen corosync-objctl \
 			  corosync-pload
 
-corosync_pload_LDADD	= ../lib/libpload.a
-corosync_objctl_LDADD	= ../lib/libconfdb.a ../lcr/liblcr.a
-corosync_cfgtool_LDADD	= ../lib/libcfg.a
+corosync_pload_LDADD	= ../lib/libpload.a ../lib/libcoroipcc.a
+corosync_objctl_LDADD	= ../lib/libconfdb.a ../lcr/liblcr.a ../lib/libcoroipcc.a
+corosync_cfgtool_LDADD	= ../lib/libcfg.a ../lib/libcoroipcc.a
 
 lint:
 	-splint $(LINT_FLAGS) $(CFLAGS) *.c