From c6a7ae3f1c3881713cf62460deaae0cd79a1d089 Mon Sep 17 00:00:00 2001
From: Matt Strapp <strap012@umn.edu>
Date: Mon, 16 Nov 2020 08:59:44 -0600
Subject: help me

---
 P3/server.c | 39 +++++++++++++++------------------------
 1 file changed, 15 insertions(+), 24 deletions(-)

diff --git a/P3/server.c b/P3/server.c
index 2f1b30b..93c28ed 100644
--- a/P3/server.c
+++ b/P3/server.c
@@ -111,13 +111,14 @@ int readFromDisk(/*necessary arguments*/) {
 void * dispatch(void *arg) {
 
   while (1) {
-
     // Accept client connection
+    int newReq = accept_connection();
+    if (newReq >= 0) {
+      // Get request from the client
+      //get_request(newReq, something);
+      // Add the request into the queue
 
-    // Get request from the client
-
-    // Add the request into the queue
-
+    }
    }
    return NULL;
 }
@@ -226,22 +227,25 @@ int main(int argc, char **argv) {
     }
   } 
 
+  pthread_attr_t attr;
+  pthread_attr_init(&attr);
+  pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
   // Start the server
   init(port);
   // Create dispatcher threads (make detachable????)
   pthread_t dThreads[dispatchers];
   for (int i=0; i<dispatchers; i++) {
-    pthread_create(&dThreads[i], PTHREAD_CREATE_DETACHED, dispatch, NULL); // DEBUG! figure out last arg
+    pthread_create(&dThreads[i], &attr, dispatch, NULL); // DEBUG! figure out last arg
   }
   //Create workers (make detachable?????)
   pthread_t wThreads[workers];
   for (int i = 0; i < workers; i++) {
-    pthread_create(&wThreads[i], PTHREAD_CREATE_DETACHED, worker, NULL); //TODO: Worker arguments
+    pthread_create(&wThreads[i], &attr, worker, NULL); //TODO: Worker arguments
   }
   // Create dynamic pool manager thread (extra credit A)
   if (dynFlag) {
     pthread_t pThread;
-    pthread_create(&pThread, PTHREAD_CREATE_DETACHED, dynamic_pool_size_update, NULL); //TODO: possible arguments
+    pthread_create(&pThread, &attr, dynamic_pool_size_update, NULL); //TODO: possible arguments
   }
 
  
@@ -251,23 +255,10 @@ int main(int argc, char **argv) {
 
     // Terminate server gracefully
     if (exitFlag){
-      printf("SIGINT caught, exiting now.\nWorker threads now being killed.\n");
+      printf("SIGINT caught, exiting now.\n");
       // Print the number of pending requests in the request queue
       /*TODO*/
       //Kill all dispatch and worker threads
-      for (int j=0; j<dispatchers; j++) {
-        if (pthread_cancel(dThreads[j]) != 0) {
-          printf("Thread ID %ld refused to die.\nThis may or may not be disasterous.\n", dThreads[j]);
-          continue;
-        }
-      }
-      printf("All dispatcher threads have been killed. Now killing worker threads.");
-      for (int j=0; j<workers;j++) {
-        if(pthread_cancel(wThreads[j]) != 0) {
-          printf("Thread ID %ld refused to die.\nThis could be disasterous.\n", wThreads[j]);
-          continue;
-        }
-      }
       // close log file
       if (fclose(logfile) != 0) {
         perror("fclose error");
@@ -276,10 +267,10 @@ int main(int argc, char **argv) {
       // Remove cache (extra credit B)
       if (cSiz != 0)
         free(dynQ);
-      printf("All threads have been successfully killed and cache has successfully been cleared.\nExiting now.\n");
+      printf("Aache has successfully been cleared.\nExiting now.\n");
       return 0;
     }
   }
-  printf("This should never be printed.");
+  printf("\n\nThis should never be printed.\n\n");
   return 42;
 }
-- 
cgit v1.2.3