migrate main IPC event loop function call from clone to pthread

This commit is contained in:
Sergey Popov 2012-04-06 13:12:42 +04:00
parent 80d7cb6e16
commit 5f63c76d0a

View File

@ -1,11 +1,12 @@
#include <sys/ipc.h> #include <sys/ipc.h>
#include <sys/msg.h> #include <sys/msg.h>
#include <pthread.h>
#include "yasnd.h" #include "yasnd.h"
#include "yasnd-gammu.h" #include "yasnd-gammu.h"
#include "yasnd-log.h" #include "yasnd-log.h"
pid_t ipc_clone_pid; pthread_t ipc_main_handle;
pid_t ipc_sms_read_clone_pid=-1; // pid of thread, that checks for new incoming SMS pid_t ipc_sms_read_clone_pid=-1; // pid of thread, that checks for new incoming SMS
int qid=-1; // IPC queue id int qid=-1; // IPC queue id
@ -55,12 +56,8 @@ int remove_queue( int qid )
return 0; return 0;
} }
int ipc_queue_loop() void* ipc_queue_loop(void* param)
{ {
// set default signal handlers
signal(SIGTERM,SIG_DFL);
signal(SIGHUP,SIG_DFL);
//
mymsgbuf qbuf; mymsgbuf qbuf;
while(1) while(1)
{ {
@ -68,7 +65,7 @@ int ipc_queue_loop()
if (result==-1) if (result==-1)
{ {
log_event("Error: finishing IPC loop process..."); log_event("Error: finishing IPC loop process...");
return 1; return (void*)1;
} }
char dbg_txt[150]; char dbg_txt[150];
sprintf(dbg_txt,"Read IPC message - Type: %ld Text: %s", qbuf.mtype, qbuf.mtext); sprintf(dbg_txt,"Read IPC message - Type: %ld Text: %s", qbuf.mtype, qbuf.mtext);
@ -129,8 +126,10 @@ int ipc_sms_reading_loop()
void ipc_init() void ipc_init()
{ {
qid = open_queue(); qid = open_queue();
unsigned char ipc_child_stack[16384]; if(pthread_create(&ipc_main_handle,NULL,ipc_queue_loop, NULL) != 0)
ipc_clone_pid=clone(ipc_queue_loop,ipc_child_stack+8192,CLONE_VM,NULL); {
log_event("Main IPC event thread creation failed");
}
// start loop, that handles new incoming SMS // start loop, that handles new incoming SMS
unsigned char sms_child_stack[16384]; unsigned char sms_child_stack[16384];
ipc_sms_read_clone_pid=clone(ipc_sms_reading_loop,sms_child_stack+8192,CLONE_VM,NULL); ipc_sms_read_clone_pid=clone(ipc_sms_reading_loop,sms_child_stack+8192,CLONE_VM,NULL);
@ -139,8 +138,7 @@ void ipc_init()
void ipc_free() void ipc_free()
{ {
kill(ipc_clone_pid,SIGTERM); pthread_cancel(ipc_main_handle);
waitpid(ipc_clone_pid,NULL,__WCLONE);
kill(ipc_sms_read_clone_pid,SIGTERM); kill(ipc_sms_read_clone_pid,SIGTERM);
waitpid(ipc_sms_read_clone_pid,NULL,__WCLONE); waitpid(ipc_sms_read_clone_pid,NULL,__WCLONE);
remove_queue(qid); remove_queue(qid);