forte: new package
[vuplus_openembedded] / packages / forte / forte-0.3 / forte-0.3-patch_20081008.diff
1 diff -Naur forte-0.3.orig/src/arch/netos/txsocha.cpp forte-0.3/src/arch/netos/txsocha.cpp
2 --- forte-0.3.orig/src/arch/netos/txsocha.cpp   2008-07-10 07:33:44.000000000 +0000
3 +++ forte-0.3/src/arch/netos/txsocha.cpp        2008-09-24 13:29:32.000000000 +0000
4 @@ -167,7 +167,7 @@
5    strcpy(ip, pa_stConnectionInformation.m_pcConnectionID);\r
6    sock_addr.sin_family = AF_INET;\r
7    sock_addr.sin_port = htons(atoi(splitString(ip)));\r
8 -  memset(&(sock_addr.sin_zero), '\0', 8);\r
9 +  memset(&(sock_addr.sin_zero), '\0', sizeof(sock_addr.sin_zero));\r
10    fprintf(stderr,"CTXSocketHandler:: Opening TCP-Connection at IP: %s\n",pa_stConnectionInformation.m_pcConnectionID);\r
11  \r
12    if ((sock_id = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1) {\r
13 diff -Naur forte-0.3.orig/src/arch/pc/pcsochan.cpp forte-0.3/src/arch/pc/pcsochan.cpp
14 --- forte-0.3.orig/src/arch/pc/pcsochan.cpp     2008-07-10 07:33:44.000000000 +0000
15 +++ forte-0.3/src/arch/pc/pcsochan.cpp  2008-09-30 10:23:36.000000000 +0000
16 @@ -116,9 +116,9 @@
17    strcpy(ip, pa_stConnectionInformation.m_pcConnectionID);\r
18    sock_addr.sin_family = AF_INET;\r
19    sock_addr.sin_port = htons(atoi(splitString(ip)));\r
20 -  memset(&(sock_addr.sin_zero), '\0', 8);\r
21 +  memset(&(sock_addr.sin_zero), '\0', sizeof(sock_addr.sin_zero));\r
22  \r
23 -  char acInfo[64] = { "CPCSocketHandler:: Opening TCP-Connection at IP: " };\r
24 +  char acInfo[128] = { "CPCSocketHandler:: Opening TCP-Connection at IP: " };\r
25    strcat(acInfo, pa_stConnectionInformation.m_pcConnectionID);\r
26    DEVLOG_INFO(cg_nID_CSocketHandler, 0x10, acInfo);\r
27  \r
28 @@ -130,6 +130,16 @@
29    }\r
30    // switch between client/server:\r
31    if (pa_stConnectionInformation.m_enServiceType == e_Server) {\r
32 +    unsigned int opt = 1;\r
33 +\r
34 +    if (setsockopt(sock_id, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)) != 0)\r
35 +    {\r
36 +      char acError[80] = { "TCP-Socket setsockopt() failed: " };\r
37 +      strcat(acError, strerror(errno));\r
38 +      DEVLOG_ERROR(cg_nID_CSocketHandler, 0x10, acError);\r
39 +      return -1;\r
40 +    }\r
41 +\r
42      sock_addr.sin_addr.s_addr = htonl(INADDR_ANY);\r
43      if (bind(sock_id, (struct sockaddr *)&sock_addr, sizeof(struct sockaddr))\r
44          != 0) {\r
45 @@ -191,8 +201,15 @@
46  int CPCSocketHandler::receiveDataOnTCP(SSocketHandlerListEntry &pa_stData) {\r
47    DEVLOG_INFO(cg_nID_CSocketHandler, 0x10, "CPCSocketHandler:: Entering ReceiveDataOnTCP\n");\r
48  \r
49 +  int sock_id;\r
50 +\r
51 +  if (pa_stData.m_bAcceptedConnection)\r
52 +    sock_id = pa_stData.m_nAcceptID;\r
53 +  else\r
54 +    sock_id = pa_stData.m_nSocketID;\r
55 +\r
56    receveagain: pa_stData.m_stConnectionInformation.m_pstRecvBuffer->m_nFilledSize\r
57 -      =recv(pa_stData.m_nAcceptID, pa_stData.m_stConnectionInformation.m_pstRecvBuffer->m_pcData, pa_stData.m_stConnectionInformation.m_pstRecvBuffer->m_nMaxSize, 0);\r
58 +      =recv(sock_id, pa_stData.m_stConnectionInformation.m_pstRecvBuffer->m_pcData, pa_stData.m_stConnectionInformation.m_pstRecvBuffer->m_nMaxSize, 0);\r
59  \r
60    if (pa_stData.m_stConnectionInformation.m_pstRecvBuffer->m_nFilledSize == -1) {\r
61      if (errno == EINTR) {\r
62 diff -Naur forte-0.3.orig/src/arch/pc/pctimeha.cpp forte-0.3/src/arch/pc/pctimeha.cpp
63 --- forte-0.3.orig/src/arch/pc/pctimeha.cpp     2008-04-22 13:31:52.000000000 +0000
64 +++ forte-0.3/src/arch/pc/pctimeha.cpp  2008-10-08 12:27:09.000000000 +0000
65 @@ -11,6 +11,7 @@
66  #include "pctimeha.h"\r
67  #include "../../core/devexec.h"\r
68  #include <time.h>\r
69 +#include <sys/time.h>\r
70  \r
71  const TINT32 CPCTimerHandler::csm_nTicksPerSecond = 1000;\r
72  \r
73 @@ -28,14 +29,34 @@
74    disableHandler();\r
75  }\r
76  \r
77 +static inline unsigned long long GetTicks(struct timeval* stTmVal, TINT32 ticksPerSecond)\r
78 +{\r
79 +  unsigned long long ret = stTmVal->tv_sec * 1000LL;// sec -> ms\r
80 +  ret += stTmVal->tv_usec/1000;// + us -> ms\r
81 +  ret /= 1000/ticksPerSecond; // ms -> ticks\r
82 +  return ret;\r
83 +}\r
84 +\r
85  bool CPCTimerHandler::run(){\r
86    struct timespec stReq;\r
87 +  struct timeval stTmNow;\r
88 +  unsigned long long tickStart;\r
89 +  unsigned long long tickNow;\r
90 +  unsigned long long tickCalled = 0;\r
91    stReq.tv_sec = 0;\r
92 -  stReq.tv_nsec = 1000000 / (csm_nTicksPerSecond / 1000);\r
93 +  stReq.tv_nsec = 1000000000 / (csm_nTicksPerSecond);\r
94 +\r
95 +  gettimeofday(&stTmNow, NULL);\r
96 +  tickNow = tickStart = GetTicks(&stTmNow, csm_nTicksPerSecond);\r
97    \r
98    while(m_bAlive){\r
99 -    nanosleep(&stReq, NULL);\r
100 +    if( (tickNow-tickStart) <= (tickCalled+1) ) {\r
101 +      nanosleep(&stReq, NULL);\r
102 +    }\r
103      nextTick(); \r
104 +    ++tickCalled;\r
105 +    gettimeofday(&stTmNow, NULL);\r
106 +    tickNow = GetTicks(&stTmNow, csm_nTicksPerSecond);\r
107    } \r
108    return true;\r
109  }\r