here is a sample code (vfork_execve.c) to demonstrate a locking problem. The code launch 3 threads : 1 signal 2 endless do nothing 3 a socket server (bind to 127.0.0.1:12345)
The server accept 3 cmd: 1) close => close cnx 2) sleep => use vfork /execv to launch external "/bin/sleep 20" to reproduce the lock: launch ./vfork_execve connect to server: =>telnet 127.1 12345 type quickly sleep close =>telnet 127.1 12345 ->close the process telnet and vfork_execve is locked until the first 'sleep' cmd has return. I've no idea why the process locks; maybe an implementation trouble or a bug. Any suggestions are welcome. Best Regards.
CC=gcc CFLAGS= -ansi -Wall -I/usr/local/ssl/include SPEC_INC_BSD= -DUNDER_BSD CCFLAGS_BSD= -g2 $(CFLAGS) $(SPEC_INC_BSD) LIB_THREAD_LINUX= -lpthread LIB_THREAD_BSD= -pthread LIBS_SOLARIS= -lsocket -lnsl LIB_LINUX= LIB_BSD= CCFLAGS=$(CCFLAGS) LIBS= $(LIB_THREAD_LINUX) $(LIB_BSD) OBJ= $(SRC:.c=.o) all: vfork_execve vfork_execve2 vfork_execve: vfork_execve.o $(CC) -o vfork_execve $(LIBS) vfork_execve.o vfork_execve.o: vfork_execve.c $(CC) $(CCFLAGS) -o $*.o -c $*.c vfork_execve2: vfork_execve2.o $(CC) -o vfork_execve2 $(LIBS) vfork_execve2.o vfork_execve2.o: vfork_execve2.c $(CC) $(CCFLAGS) -o $*.o -c $*.c clean: @rm -f *.o y.tab.c lex.yy.c
<<inline: vfork_execve.c>>
<<inline: vfork_execve2.c>>