Skip to content
Snippets Groups Projects
Commit c4c1b930 authored by Lubos Slovak's avatar Lubos Slovak
Browse files

Dispatcher integrated with the present program.

Removed sm_start() and thread information from socket-manager.
sm_listen() made public, passed to dispatcher in start_server().
Fixes in dispatcher.
parent b4a4696c
No related branches found
No related tags found
No related merge requests found
......@@ -7,6 +7,7 @@
#include "cuckoo-hash-table.h"
#include "dns-simple.h"
#include "socket-manager.h"
#include "dispatcher.h"
//#define CK_TEST_DEBUG
//#define CK_TEST_LOOKUP
......@@ -604,15 +605,24 @@ int start_server( char *filename )
fclose(file);
printf("Creating socket manager...\n\n");
sm_manager *manager = sm_create(PORT, THREAD_COUNT, answer_request);
sm_manager *manager = sm_create(PORT, answer_request);
if (manager == NULL) {
ck_destroy_table(&table);
return -1;
}
printf("\nDone.\n\n");
printf("Starting socket manager...\n");
sm_start(manager);
printf("Creating dispatcher...\n\n");
dpt_dispatcher *dispatcher = dpt_create(THREAD_COUNT, sm_listen, manager);
if (dispatcher == NULL) {
ck_destroy_table(&table);
sm_destroy(manager);
return -1;
}
printf("\nDone.\n\n");
printf("Starting dispatcher...\n");
dpt_start(dispatcher);
// can I do this?? pointer to the manager is still in the threads
sm_destroy(&manager);
......
#include "dispatcher.h"
#include <stdlib.h>
#include <pthread.h>
/*----------------------------------------------------------------------------*/
dpt_dispatcher *dpt_create( int thread_count, void *(*thr_routine)(void *),
......@@ -22,16 +25,14 @@ int dpt_start( dpt_dispatcher *dispatcher )
for (i = 0; i < dispatcher->thread_count; ++i)
{
if (pthread_create(&dispatcher->threads[i], NULL,
dispatcher->routine, dispatcher->routine_obj)
{
dispatcher->routine, dispatcher->routine_obj)) {
printf( "ERROR CREATING THREAD %d", i );
return -1;
}
}
for (i = 0; i < dispatcher->thread_count; ++i)
{
if ( pthread_join( dispatcher->threads[i], NULL ) )
{
if ( pthread_join( dispatcher->threads[i], NULL ) ) {
printf( "ERROR JOINING THREAD %d", i );
return -1;
}
......
......@@ -10,7 +10,7 @@ typedef struct dpt_dispatcher {
void *(*routine)(void *);
void *routine_obj;
pthread_t *threads;
} dispatcher;
} dpt_dispatcher;
/*----------------------------------------------------------------------------*/
......
......@@ -14,7 +14,7 @@ int main( int argc, char **argv )
test_hash_table(argv[1]);
//start_server(argv[1]);
start_server(argv[1]);
return 0;
}
......@@ -19,7 +19,7 @@ const uint SOCKET_BUFF_SIZE = 4096;
/*----------------------------------------------------------------------------*/
sm_manager *sm_create( unsigned short port, uint thr_count,
sm_manager *sm_create( unsigned short port,
void (*answer_fnc)(const char *, uint, char *, uint *) )
{
sm_manager *manager = malloc(sizeof(sm_manager));
......@@ -80,7 +80,6 @@ sm_manager *sm_create( unsigned short port, uint thr_count,
printf("Successful\n");
}*/
manager->thread_count = thr_count;
manager->answer_fnc = answer_fnc;
return manager;
......@@ -159,31 +158,3 @@ void *sm_listen( void *obj )
}
}
/*----------------------------------------------------------------------------*/
int sm_start( sm_manager *manager )
{
pthread_t threads[manager->thread_count];
int i;
for (i = 0; i < manager->thread_count; ++i)
{
if (pthread_create(&threads[i], NULL, sm_listen, (void *)manager))
{
printf( "ERROR CREATING THREAD %d", i );
return -1;
}
}
for (i = 0; i < manager->thread_count; ++i)
{
if ( pthread_join( threads[i], NULL ) )
{
printf( "ERROR JOINING THREAD %d", i );
return -1;
}
}
return 0;
}
......@@ -11,10 +11,9 @@ const uint SOCKET_BUFF_SIZE;
struct sm_manager {
int socket; // later use array of sockets?
uint thread_count;
struct epoll_event event;
int epfd;
void (*answer_fnc)( const char *, uint, char *, uint * );
void (*answer_fnc)(const char *, uint, char *, uint *);
pthread_mutex_t mutex;
};
......@@ -22,11 +21,11 @@ typedef struct sm_manager sm_manager;
/*----------------------------------------------------------------------------*/
sm_manager *sm_create( unsigned short port, uint thr_count,
sm_manager *sm_create( unsigned short port,
void (*answer_fnc)(const char *, uint, char *, uint *) );
void sm_destroy( sm_manager **manager );
void *sm_listen( void *obj );
int sm_start( sm_manager *manager );
void sm_destroy( sm_manager **manager );
#endif
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment