]> rtime.felk.cvut.cz Git - frescor/fna.git/blobdiff - src_frescan/frescan_queues.c
michael found an error in the definition of the posix sporadic servers so i replaced...
[frescor/fna.git] / src_frescan / frescan_queues.c
index 681c7161d7ccf7ee40f703fee355e26de66f1aed..b6ae28a2b08d017264db76ca989c9231d05c9f77 100644 (file)
@@ -25,6 +25,7 @@
 
 #include <stdlib.h>
 #include <time.h>
+#include <misc/timespec_operations.h>
 
 #include "frescan_queues.h"
 #include "frescan_packets.h"
@@ -284,24 +285,26 @@ int frescan_servers_enqueue(frescan_network_t net,
                             frescan_ss_t id,
                             frescan_packet_t *packet)
 {
-        DEBUG(FRESCAN_SERVERS_ENABLE_DEBUG, "enqueue packet for id:%u\n", id);
+        frescan_server_data_t *server = &the_servers_pool[net][id];
 
         clock_gettime (CLOCK_MONOTONIC, &packet->timestamp);
 
+        DEBUG(FRESCAN_SERVERS_ENABLE_DEBUG, "id:%u timestamp:(%d, %d)\n",
+              id, packet->timestamp.tv_sec, packet->timestamp.tv_nsec);
+
         // add the packet to the server fifo list
-        list_add_tail(&packet->fifo_list,
-                       &the_servers_pool[net][id].packet_list.fifo_list);
+        list_add_tail(&packet->fifo_list, &server->packet_list.fifo_list);
 
-        // if the server was inactive (no packets to send) put it active
-        // (in the active list)
-        if (the_servers_pool[net][id].pending_packets == 0) {
+        // if the server was inactive (no packets) put it in the active list
+        if (server->pending_packets == 0) {
                 DEBUG(FRESCAN_SERVERS_ENABLE_DEBUG,
-                      "server was inactive, put in the active list\n");
-                list_add_tail(&the_servers_pool[net][id].servers_list,
-                               &the_active_servers[net].servers_list);
+                      "ss becomes active act_time=timestamp\n");
+                list_add_tail(&server->servers_list,
+                              &the_active_servers[net].servers_list);
+                server->act_time = packet->timestamp;
         }
 
-        the_servers_pool[net][id].pending_packets++;
+        server->pending_packets++;
         return 0;
 }
 
@@ -354,30 +357,33 @@ int frescan_servers_dequeue(frescan_network_t net,
                             frescan_prio_t *packet_prio)
 {
         struct list_head *pos;
+        frescan_server_data_t *server;
 
-        if (list_empty(&the_servers_pool[net][id].packet_list.fifo_list)) {
+        server = &the_servers_pool[net][id];
+
+        if (list_empty(&server->packet_list.fifo_list)) {
                 ERROR("no packet in server %d fifo list\n", id);
                 return -1;
         }
 
-        list_for_each(pos, &the_servers_pool[net][id].packet_list.fifo_list) {
+        list_for_each(pos, &server->packet_list.fifo_list) {
                 *packet = list_entry(pos, frescan_packet_t, fifo_list);
                 break;
         }
 
         list_del(&((*packet)->fifo_list));
-        *packet_prio = the_servers_pool[net][id].current_priority;
-        the_servers_pool[net][id].pending_packets--;
+        *packet_prio = server->current_priority;
+        server->pending_packets--;
 
-        if (the_servers_pool[net][id].pending_packets == 0) {
+        if (server->pending_packets == 0) {
                 DEBUG(FRESCAN_SERVERS_ENABLE_DEBUG,
                       "no more packets, delete from active list\n");
-                list_del(&the_servers_pool[net][id].servers_list);
+                list_del(&server->servers_list);
         }
 
         DEBUG(FRESCAN_SERVERS_ENABLE_DEBUG,
               "dequeued packet server:%u cur_prio:%u pending:%u\n",
-              id, *packet_prio, the_servers_pool[net][id].pending_packets);
+              id, *packet_prio, server->pending_packets);
 
         return 0;
 }