Removed the use of threads
authorAndreas Tonnesen <andreto@olsr.org>
Fri, 12 Nov 2004 21:20:23 +0000 (21:20 +0000)
committerAndreas Tonnesen <andreto@olsr.org>
Fri, 12 Nov 2004 21:20:23 +0000 (21:20 +0000)
src/ipc_frontend.h
src/linux/link_layer.c
src/main.c
src/scheduler.c
src/scheduler.h
src/socket_parser.c
src/socket_parser.h

index fc58c99..874ec8c 100644 (file)
@@ -19,7 +19,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  * 
  * 
- * $Id: ipc_frontend.h,v 1.10 2004/11/12 16:27:48 kattemat Exp $
+ * $Id: ipc_frontend.h,v 1.11 2004/11/12 21:20:23 kattemat Exp $
  *
  */
 /*
@@ -37,7 +37,6 @@
 #include <netinet/in.h>
 #include <unistd.h>
 #include <fcntl.h>
-#include <pthread.h>
 #include <arpa/inet.h>
 #include <signal.h>
 
index 8d3f9a9..233cb7c 100644 (file)
@@ -19,7 +19,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  * 
  * 
- * $Id: link_layer.c,v 1.6 2004/10/18 13:13:38 kattemat Exp $
+ * $Id: link_layer.c,v 1.7 2004/11/12 21:20:23 kattemat Exp $
  *
  */
 
@@ -36,7 +36,6 @@
 #include <string.h>
 #include <sys/ioctl.h>
 #include <net/if_arp.h>
-#include <pthread.h>
 #include <unistd.h>
 #include <stdlib.h>
 
@@ -70,7 +69,7 @@ int
 convert_ip_to_mac(union olsr_ip_addr *, struct sockaddr *, char *);
 
 void
-ping_thread(void *);
+send_ping(union olsr_ip_addr *);
 
 
 void
@@ -185,7 +184,6 @@ convert_ip_to_mac(union olsr_ip_addr *ip, struct sockaddr *mac, char *interface)
 {
   struct arpreq        arp_query;
   struct sockaddr_in tmp_sockaddr;
-  pthread_t ping_thr;
 
 
   memset(&arp_query, 0, sizeof(struct arpreq));
@@ -212,7 +210,7 @@ convert_ip_to_mac(union olsr_ip_addr *ip, struct sockaddr *mac, char *interface)
       olsr_printf(1, "Arp failed: (%s) - trying lookup\n", strerror(errno));
 
       /* No address - create a thread that sends a PING */
-      pthread_create(&ping_thr, NULL, (void *)&ping_thread, ip);
+      send_ping(ip);
   
       return -1;
     }
@@ -236,9 +234,8 @@ convert_ip_to_mac(union olsr_ip_addr *ip, struct sockaddr *mac, char *interface)
 /* ONLY IPv4 FOR NOW!!! */
 
 void
-ping_thread(void *_ip)
+send_ping(union olsr_ip_addr *ip)
 {
-  union olsr_ip_addr *ip;
   int ping_s;
   struct sockaddr dst;
   struct sockaddr_in *dst_in;
@@ -246,7 +243,6 @@ ping_thread(void *_ip)
   struct icmphdr *icp;
 
   dst_in = (struct sockaddr_in *) &dst;
-  ip = (union olsr_ip_addr *)_ip;
 
   dst_in->sin_family = AF_INET;
   memcpy(&dst_in->sin_addr, ip, ipsize);
index 1bdcba2..1b84c85 100644 (file)
@@ -19,7 +19,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  * 
  * 
- * $Id: main.c,v 1.36 2004/11/12 20:48:19 kattemat Exp $
+ * $Id: main.c,v 1.37 2004/11/12 21:20:23 kattemat Exp $
  *
  */
 
@@ -65,14 +65,6 @@ set_default_values(void);
 static int
 set_default_ifcnfs(struct olsr_if *, struct if_config_options *);
 
-#if !defined WIN32
-/*
- * Local variable declarations 
- */
-
-static pthread_t main_thread;
-#endif
-
 
 /**
  * Main entrypoint
@@ -85,9 +77,6 @@ main(int argc, char *argv[])
   struct in_addr in;
   struct in6_addr in6;
 
-  /* The thread for the scheduler */
-  pthread_t thread;
-
   struct if_config_options *default_ifcnf;
 
   struct stat statbuf;
@@ -499,9 +488,6 @@ main(int argc, char *argv[])
    */
   enable_ip_forwarding(olsr_cnf->ip_version);
 
-  /* Initialize scheduler MUST HAPPEN BEFORE REGISTERING ANY FUNCTIONS! */
-  init_scheduler(olsr_cnf->pollrate);
-
   /* Initialize parser */
   olsr_init_parser();
 
@@ -621,8 +607,6 @@ main(int argc, char *argv[])
       setsid();
     }
 #endif
-  /* Starting scheduler */
-  start_scheduler(&thread);
 
   /*
    * Start syslog entry
@@ -642,12 +626,12 @@ main(int argc, char *argv[])
 #endif
 
   /* Register socket poll event */
-#if 0
   olsr_register_timeout_function(&poll_sockets);
-#endif
 
+  /* Starting scheduler */
+  scheduler();
   /* Go into listenloop */
-  listen_loop();
+  //listen_loop();
 
   /* Like we're ever going to reach this ;-) */
   return 1;
@@ -672,12 +656,6 @@ olsr_shutdown(int signal)
 #endif
 {
   struct interface *ifn;
-#ifndef WIN32
-  if(main_thread != pthread_self())
-    {
-      pthread_exit(0);
-    }
-#endif
 
   olsr_printf(1, "Received signal %d - shutting down\n", signal);
 
@@ -738,12 +716,6 @@ set_default_values()
 
   will_int = 10 * HELLO_INTERVAL; /* Willingness update interval */
 
-
-#ifndef WIN32
-  /* Get main thread ID */
-  main_thread = pthread_self();
-#endif
-
   /* Gateway tunneling */
   use_tunnel = OLSR_FALSE;
   inet_tnl_added = OLSR_FALSE;
index dc286ce..c57cc48 100644 (file)
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  * 
  * 
- * $Id: scheduler.c,v 1.16 2004/11/05 11:52:56 kattemat Exp $
+ * $Id: scheduler.c,v 1.17 2004/11/12 21:20:23 kattemat Exp $
  *
  */
 
-/*
- * Private functions
- */
-
-void
-scheduler(void);
 
 #include "defs.h"
 #include "scheduler.h"
@@ -42,35 +36,9 @@ scheduler(void);
 #include "build_msg.h"
 
 
-int
-init_scheduler(float poll_interval)
-{
-
-  sched_poll_interval = poll_interval;
-
-  timeout_functions = NULL;
-  event_functions = NULL;
-
-  return 1;
-}
-
+static float pollrate;
 
-/*
- * The mutex "mutex" is used to protect memory
- * between the scheduler, which runs in a thread
- * of its own, and the main thread which mainly
- * is packet processing and route calculation.
- */
-void
-start_scheduler(pthread_t *thread_id)
-{
-  /* Initialize the mutex */
-  pthread_mutex_init(&mutex, NULL);
-  /* Create the scheduler thread */
-  pthread_create(thread_id, NULL, (void *)&scheduler, NULL);
 
-  return;
-}
 
 /**
  *Main scheduler event loop. Polls at every
@@ -105,12 +73,14 @@ scheduler()
 
   struct interface *ifn;
  
-  interval_usec = (olsr_u32_t)(sched_poll_interval * 1000000);
+  pollrate = olsr_cnf->pollrate;
+
+  interval_usec = (olsr_u32_t)(pollrate * 1000000);
 
   interval.tv_sec = interval_usec / 1000000;
   interval.tv_usec = interval_usec % 1000000;
 
-  olsr_printf(1, "Scheduler started - polling every %0.2f seconds\n", sched_poll_interval);
+  olsr_printf(1, "Scheduler started - polling every %0.2f seconds\n", pollrate);
 
   olsr_printf(3, "Max jitter is %f\n\n", max_jitter);
 
@@ -123,11 +93,6 @@ scheduler()
 
       gettimeofday(&start_of_loop, NULL);
 
-
-
-      /* C R I T I C A L - S E C T I O N - S T A R T */
-      pthread_mutex_lock(&mutex);
-
       /* Update the global timestamp */
       gettimeofday(&now, NULL);
       nowtm = gmtime((time_t *)&now.tv_sec);
@@ -171,7 +136,7 @@ scheduler()
       /* UPDATED - resets timer upon triggered execution */
       while(entry)
        {
-         entry->since_last += sched_poll_interval;
+         entry->since_last += pollrate;
 
          /* Timed out */
          if((entry->since_last > entry->interval) ||
@@ -206,9 +171,6 @@ scheduler()
            net_output(ifn);
        }
 
-      /* C R I T I C A L - S E C T I O N - E N D */
-      pthread_mutex_unlock(&mutex);
-
 
       gettimeofday(&end_of_loop, NULL);
 
index d931fce..92a063b 100644 (file)
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  * 
  * 
- * $Id: scheduler.h,v 1.7 2004/10/18 13:13:37 kattemat Exp $
+ * $Id: scheduler.h,v 1.8 2004/11/12 21:20:23 kattemat Exp $
  *
  */
 
 
 
 
-#ifndef _OLSR_TIMER
-#define _OLSR_TIMER
-
-#include <pthread.h>
+#ifndef _OLSR_SCHEDULER
+#define _OLSR_SCHEDULER
 
 
 /* List entries */
@@ -57,25 +55,11 @@ struct event_entry
 
 /* Lists */
 struct timeout_entry *timeout_functions;
-
 struct event_entry *event_functions;
 
-
-/* The polling interval */
-float sched_poll_interval;
-
-
-/* mutex for thread */
-extern pthread_mutex_t mutex;
-
-
 float will_int; /* Willingness update interval */
-
 float max_jitter;
 
-int
-init_scheduler(float);
-
 int
 olsr_register_timeout_function(void (*)(void));
 
@@ -89,6 +73,6 @@ int
 olsr_remove_scheduler_event(void (*)(void *), void *, float, float, olsr_u8_t *);
 
 void
-start_scheduler(pthread_t *);
+scheduler(void);
 
 #endif
index 8b6d2eb..9efb3b3 100644 (file)
@@ -19,7 +19,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  * 
  * 
- * $Id: socket_parser.c,v 1.13 2004/11/12 20:48:19 kattemat Exp $
+ * $Id: socket_parser.c,v 1.14 2004/11/12 21:20:23 kattemat Exp $
  *
  */
 
@@ -138,89 +138,6 @@ remove_olsr_socket(int fd, void(*pf)(int))
 }
 
 
-
-
-
-void
-listen_loop()
-{
-  fd_set ibits;
-  int n;
-  struct olsr_socket_entry *olsr_sockets;
-  struct timeval tvp;
-
-  FD_ZERO(&ibits);
-
-  /* Main listening loop */
-  for (;;)
-    {
-      FD_ZERO(&ibits);
-      /* Adding file-descriptors to FD set */
-      /* Begin critical section */
-      pthread_mutex_lock(&mutex);
-      olsr_sockets = olsr_socket_entries;
-      while(olsr_sockets)
-       {
-         FD_SET(olsr_sockets->fd, &ibits);
-         olsr_sockets = olsr_sockets->next;
-       }
-      /* End critical section */
-      pthread_mutex_unlock(&mutex);
-
-
-      /* If there are no registered sockets we
-       * do not call select(2)
-       */
-      if (hfd == 0)
-       {
-         sleep(OLSR_SELECT_TIMEOUT);
-         continue;
-       }
-
-      /* Add timeout to ensure update */
-      tvp.tv_sec = OLSR_SELECT_TIMEOUT;
-      tvp.tv_usec = 0;
-      
-      /* Runnig select on the FD set */
-      n = select(hfd, &ibits, 0, 0, &tvp);
-      
-      /* Did somethig go wrong? */
-      if (n <= 0) 
-       {
-         if (n < 0) 
-           {
-             if (errno == EINTR)
-               continue;
-             olsr_syslog(OLSR_LOG_ERR, "select: %m");
-             olsr_printf(1, "Error select: %s", strerror(errno));
-           }
-         continue;
-       }
-
-      gettimeofday(&now, NULL);      
-      
-      /* Begin critical section */
-      pthread_mutex_lock(&mutex);
-      olsr_sockets = olsr_socket_entries;
-      while(olsr_sockets)
-       {
-         if(FD_ISSET(olsr_sockets->fd, &ibits))
-           {
-             olsr_sockets->process_function(olsr_sockets->fd);
-           }
-         olsr_sockets = olsr_sockets->next;
-       }
-      /* End critical section */
-      pthread_mutex_unlock(&mutex);
-  
-
-    } /* for(;;) */
-       
-} /* main */
-
-
-
-
 void
 poll_sockets()
 {
@@ -257,6 +174,7 @@ poll_sockets()
       return;
     }
 
+  /* Update time since this is much used by the parsing functions */
   gettimeofday(&now, NULL);      
   
   olsr_sockets = olsr_socket_entries;
index bc65828..21c6155 100644 (file)
@@ -19,7 +19,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  * 
  * 
- * $Id: socket_parser.h,v 1.7 2004/11/12 20:48:19 kattemat Exp $
+ * $Id: socket_parser.h,v 1.8 2004/11/12 21:20:23 kattemat Exp $
  *
  */
 
@@ -27,8 +27,6 @@
 #ifndef _OLSR_SOCKET_PARSER
 #define _OLSR_SOCKET_PARSER
 
-#include <pthread.h>
-
 
 struct olsr_socket_entry
 {
@@ -39,8 +37,6 @@ struct olsr_socket_entry
 
 struct olsr_socket_entry *olsr_socket_entries;
 
-pthread_mutex_t mutex; /* Mutex for thread */
-
 
 void
 add_olsr_socket(int, void(*)(int));