Преглед изворни кода

changes in ua_server_worker relates #153

Stasik0 пре 10 година
родитељ
комит
c4ea9966a7
2 измењених фајлова са 9 додато и 4 уклоњено
  1. 1 1
      examples/opcuaClient.c
  2. 8 3
      src/server/ua_server_worker.c

+ 1 - 1
examples/opcuaClient.c

@@ -404,7 +404,7 @@ int main(int argc, char *argv[]) {
 	}
 
 	if(defaultParams){
-		udp = UA_TRUE;
+		udp = UA_FALSE;
 	}else{
 		if(atoi(argv[8]) != 0)
 			udp = UA_TRUE;

+ 8 - 3
src/server/ua_server_worker.c

@@ -1,4 +1,6 @@
 #include <stdio.h>
+#define __USE_POSIX199309 //nanosleep
+#include <time.h> //nanosleep
 #include "ua_server_internal.h"
 
 /**
@@ -250,6 +252,7 @@ static UA_UInt16 processTimedWork(UA_Server *server) {
     UA_UInt16 timeout = MAXTIMEOUT;
     if(tw)
         timeout = (tw->time - current)/10;
+    if(timeout>MAXTIMEOUT)timeout = MAXTIMEOUT;
     return timeout;
 }
 
@@ -411,9 +414,6 @@ UA_StatusCode UA_Server_run(UA_Server *server, UA_UInt16 nThreads, UA_Boolean *r
             UA_WorkItem *work;
             UA_Int32 workSize;
             if(*running) {
-                if(i == server->nlsSize-1)
-                    workSize = nl->getWork(nl->nlHandle, &work, timeout);
-                else
                     workSize = nl->getWork(nl->nlHandle, &work, 0);
             } else {
                 workSize = server->nls[i].stop(nl->nlHandle, &work);
@@ -434,6 +434,11 @@ UA_StatusCode UA_Server_run(UA_Server *server, UA_UInt16 nThreads, UA_Boolean *r
 #endif
         }
 
+        struct timespec reqtime;
+        reqtime.tv_sec = 0;
+        reqtime.tv_nsec = timeout * 1000; //from us to ns
+        nanosleep(&reqtime, UA_NULL);
+
         // 3.3) Exit?
         if(!*running)
             break;