Skip to content

Commit

Permalink
Removed the acknowledge signal call, as signals are no longer guranteed
Browse files Browse the repository at this point in the history
to come one at a time.
  • Loading branch information
Nikhil Samith Bysani committed Dec 21, 2008
1 parent 8544d1d commit 3e7d5f4
Show file tree
Hide file tree
Showing 5 changed files with 2 additions and 77 deletions.
5 changes: 1 addition & 4 deletions src/app/main.c
Expand Up @@ -35,12 +35,10 @@

void bind_suc(int signal, int sig_id, void *args) {
fprintf(stderr,"The bind signal has been caught.\n");
BANG_acknowledge_signal(signal,sig_id);
}

void client_con(int signal, int sig_id, void *args) {
fprintf(stderr,"A peer has connected.\n");
BANG_acknowledge_signal(signal,sig_id);
}

static gboolean delete_event(GtkWidget *widget, GdkEvent *event, gpointer data) {
Expand All @@ -55,13 +53,12 @@ static gboolean delete_event(GtkWidget *widget, GdkEvent *event, gpointer dat
return TRUE;
}

static void destroy( GtkWidget *widget, gpointer data){
static void destroy(GtkWidget *widget, gpointer data){
///TODO: make bang_close actually close rather than wait forever.
BANG_close();
gtk_main_quit();
}


int main(int argc, char **argv) {
GtkWidget *window;
///TODO: Add this statusbar, at let it display the bind state.
Expand Down
2 changes: 0 additions & 2 deletions src/base/bang-com.c
Expand Up @@ -54,7 +54,6 @@ void* BANG_peer_thread(void *peer_id) {
void BANG_peer_added(int signal,int sig_id,void* socket) {
BANG_add_peer(*((int*)socket));
///TODO: socket currently leaks, fix this.
BANG_acknowledge_signal(signal,sig_id);
}

void BANG_add_peer(int socket) {
Expand All @@ -68,7 +67,6 @@ void BANG_add_peer(int socket) {
void BANG_peer_removed(int signal,int sig_id,void *peer_id) {
BANG_remove_peer(*((int*)peer_id));
///TODO: peer_id currently leaks, fix this.
BANG_acknowledge_signal(signal,sig_id);
}

void BANG_remove_peer(int peer_id) {
Expand Down
2 changes: 1 addition & 1 deletion src/base/bang-com.h
Expand Up @@ -46,7 +46,7 @@ int BANG_new_peer_id();
* \brief Adds a request to the peer_id peer.
*/
///TODO: Figure out the structure for the request
void BANG_add_request_to_peer(int peer_id,void *request);
void BANG_add_request_to_peer(int peer_id,void *request);

/**
* \param request The request to add.
Expand Down
60 changes: 0 additions & 60 deletions src/base/bang-signals.c
Expand Up @@ -11,15 +11,13 @@
#include"bang-types.h"
#include<errno.h>
#include<pthread.h>
#include<semaphore.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

///The handlers for each signal is stored in linked list.
struct _signal_node {
BANGSignalHandler handler;
sem_t signal_semaphore;
struct _signal_node *next;
};

Expand All @@ -42,7 +40,6 @@ void BANG_sig_init() {

void recursive_sig_free(signal_node *head) {
if (head->next != NULL) {
sem_destroy(&(head->signal_semaphore));
recursive_sig_free(head->next);
}
free(head);
Expand All @@ -62,7 +59,6 @@ int BANG_install_sighandler(int signal, BANGSignalHandler handler) {
if (signal_handlers[signal] == NULL) {
signal_handlers[signal] = (signal_node*) malloc(sizeof(signal_node));
signal_handlers[signal]->handler = handler;
sem_init(&(signal_handlers[signal])->signal_semaphore,0,1);
signal_handlers[signal]->next = NULL;
return 0;
} else {
Expand All @@ -71,7 +67,6 @@ int BANG_install_sighandler(int signal, BANGSignalHandler handler) {
if (cur->next == NULL) {
cur->next =(signal_node*) malloc(sizeof(signal_node));
cur->next->handler = handler;
sem_init(&(cur->next->signal_semaphore),0,1);
cur->next->next = NULL;
return 0;
}
Expand All @@ -87,32 +82,13 @@ typedef struct {
void *handler_args;
} send_signal_args;

void* thread_send_signal(void *args) {
send_signal_args *sigargs = (send_signal_args*)args;
#ifdef BDEBUG_1
fprintf(stderr,"Going to wait for handler %p with %p.\n",sigargs->signode->handler,&(sigargs->signode->signal_semaphore));
#endif
sem_wait(&(sigargs->signode->signal_semaphore));
#ifdef BDEBUG_1
fprintf(stderr,"Done waiting for handler %p.\n",sigargs->signode->handler);
#endif
sigargs->signode->handler(sigargs->signal,sigargs->sig_id,sigargs->handler_args);
free(args);
args = NULL;
return NULL;
}

int BANG_send_signal(int signal, BANG_sigargs args) {
#ifdef BDEBUG_1
fprintf(stderr,"Sending out the signal %d.\n",signal);
fprintf(stderr,"The signal_node is %p.\n",signal_handlers[signal]);
#endif

signal_node *cur;
/*
pthread_t signal_threads;
send_signal_args *sigargs;
*/

int i = 0;
void *sigargs;
Expand All @@ -125,43 +101,7 @@ int BANG_send_signal(int signal, BANG_sigargs args) {
}
cur->handler(signal,(signal << (sizeof(int) * 8 / 2)) + i,sigargs);

/*
Signals really don't need to be atmoic.
sigargs = (send_signal_args*) calloc(1,sizeof(send_signal_args));
sigargs->signode = cur;
sigargs->signal = signal;
sigargs->sig_id = (signal << (sizeof(int) * 8 / 2)) + i;
sigargs->handler_args = args;
#ifdef BDEBUG_1
fprintf(stderr,"Sending out signal to handler %p.\n",cur->handler);
#endif
if (pthread_create(&signal_threads,NULL,&thread_send_signal,(void*)sigargs) != 0) {
#ifdef BDEBUG_1
fprintf(stderr,"Pthread create error.\n");
#endif
return -1;
} else {
pthread_detach(signal_threads);
}
*/
++i;
}
return 0;
}


void BANG_acknowledge_signal(int signal, int sig_id) {
signal_node *cur = signal_handlers[sig_id >> (sizeof(int) * 8 /2)];
int i = 0, target = sig_id << (sizeof(int) * 8 /2) >> (sizeof(int) * 8 /2);
for (; cur != NULL; cur = cur->next) {
if (i == target) {
#ifdef BDEBUG_1
fprintf(stderr,"Signal semaphore %d has been posted.\n",target);
#endif
//sem_post(&(cur->signal_semaphore));
break;
}
++i;
}
}
10 changes: 0 additions & 10 deletions src/base/bang-signals.h
Expand Up @@ -33,16 +33,6 @@
*/
int BANG_install_sighandler(int signal, BANGSignalHandler handler);

/**
* \param signal The signal type to acknowledge.
* \param sig_id The id of the signal
*
* \brief Acknowledges that the signal has been received, and that
* the function is ready to take another.
*/
void BANG_acknowledge_signal(int signal, int sig_id);


/**
* \param signal The signal number which to send.
* \param args The arguements to the handlers which are called.
Expand Down

0 comments on commit 3e7d5f4

Please sign in to comment.