summaryrefslogtreecommitdiffstats
path: root/friendfinder/handler.c
diff options
context:
space:
mode:
Diffstat (limited to 'friendfinder/handler.c')
-rw-r--r--friendfinder/handler.c37
1 files changed, 26 insertions, 11 deletions
diff --git a/friendfinder/handler.c b/friendfinder/handler.c
index fad9b8b..b1a6075 100644
--- a/friendfinder/handler.c
+++ b/friendfinder/handler.c
@@ -6,35 +6,50 @@
#include "handler.h"
pthread_t msg_thread, sender_thread, receiver_thread;
-
+int msg_start = 0, sender_start = 0, receiver_start = 0;
void init_msg_thread(char *from, char *to)
{
- struct nick *nicknames = (struct nick*) malloc(sizeof(struct nick));
- nicknames->from = from;
- nicknames->to = to;
+ if (msg_start == 0)
+ {
+ struct nick *nicknames = (struct nick*) malloc(sizeof(struct nick));
+ nicknames->from = from;
+ nicknames->to = to;
+
+ pthread_create(&msg_thread, NULL, msg_main_loop, (void*) nicknames);
- pthread_create(&msg_thread, NULL, msg_main_loop, (void*) nicknames);
+ printf("HANDLER: msg thread init...\n");
- printf("HANDLER: msg thread init...\n");
+ msg_start = 1;
+ }
}
void init_receiver_thread(char *from)
{
- pthread_create(&receiver_thread, NULL, receiver_main, (void*) from);
+ if (receiver_start == 0)
+ {
+ pthread_create(&receiver_thread, NULL, receiver_main, (void*) from);
- printf("HANDLER: receiver thread init...\n");
+ printf("HANDLER: receiver thread init...\n");
+
+ receiver_start = 1;
+ }
}
void init_sender_thread(char *from)
{
- pthread_create(&sender_thread, NULL, sender_main, (void*) from);
+ if (sender_start == 0)
+ {
+ pthread_create(&sender_thread, NULL, sender_main, (void*) from);
+
+ printf("HANDLER: sender thread init...\n");
- printf("HANDLER: sender thread init...\n");
+ sender_start = 1;
+ }
}
void close_threads()
{
- pthread_exit(NULL);
printf("HANDLER: all threads are closed...\n");
+ exit(0);
}