changed log in provider side
[platform/upstream/iotivity.git] / service / notification / src / provider / NSProviderScheduler.c
1 //******************************************************************\r
2 //\r
3 // Copyright 2016 Samsung Electronics All Rights Reserved.\r
4 //\r
5 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\r
6 //\r
7 // Licensed under the Apache License, Version 2.0 (the "License");\r
8 // you may not use this file except in compliance with the License.\r
9 // You may obtain a copy of the License at\r
10 //\r
11 //      http://www.apache.org/licenses/LICENSE-2.0\r
12 //\r
13 // Unless required by applicable law or agreed to in writing, software\r
14 // distributed under the License is distributed on an "AS IS" BASIS,\r
15 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
16 // See the License for the specific language governing permissions and\r
17 // limitations under the License.\r
18 //\r
19 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\r
20 \r
21 #include "NSProviderScheduler.h"\r
22 \r
23 pthread_t NSThread[THREAD_COUNT];\r
24 pthread_mutex_t NSMutex[THREAD_COUNT];\r
25 sem_t NSSemaphore[THREAD_COUNT];\r
26 bool NSIsRunning[THREAD_COUNT] =\r
27 { false, };\r
28 \r
29 NSTask* NSHeadMsg[THREAD_COUNT] =\r
30 { 0, };\r
31 NSTask* NSTailMsg[THREAD_COUNT] =\r
32 { 0, };\r
33 \r
34 void * NSResponseSchedule(void *ptr);\r
35 void * NSDiscoverySchedule(void *ptr);\r
36 void * NSSubScriptionSchedule(void *ptr);\r
37 void * NSNotificationSchedule(void *ptr);\r
38 \r
39 bool NSInitScheduler()\r
40 {\r
41     OIC_LOG(INFO, SCHEDULER_TAG, "NSInitScheduler()");\r
42     NS_LOG(DEBUG, "NSInitScheduler - IN");\r
43 \r
44     int i = 0;\r
45 \r
46     for (i = 0; i < THREAD_COUNT; i++)\r
47     {\r
48         pthread_mutex_init(&NSMutex[i], NULL);\r
49         NSIsRunning[i] = true;\r
50         sem_init(&(NSSemaphore[i]), 0, 0);\r
51     }\r
52 \r
53     NS_LOG(DEBUG, "NSInitScheduler - OUT");\r
54     return true;\r
55 }\r
56 \r
57 bool NSStartScheduler()\r
58 {\r
59     int i = 0;\r
60 \r
61     for (i = 0; i < THREAD_COUNT; i++)\r
62     {\r
63         pthread_mutex_lock(&NSMutex[i]);\r
64 \r
65         switch (i)\r
66         {\r
67             case RESPONSE_SCHEDULER:\r
68             {\r
69                 NS_LOG(DEBUG, "CASE RESPONSE_SCHEDULER :");\r
70                 pthread_create(&NSThread[i], NULL, NSResponseSchedule, NULL);\r
71             }\r
72                 break;\r
73 \r
74             case DISCOVERY_SCHEDULER:\r
75             {\r
76                 NS_LOG(DEBUG, "CASE DISCOVERY_SCHEDULER :");\r
77                 pthread_create(&NSThread[i], NULL, NSDiscoverySchedule, NULL);\r
78             }\r
79                 break;\r
80 \r
81             case SUBSCRIPTION_SCHEDULER:\r
82             {\r
83                 NS_LOG(DEBUG, "CASE SUBSCRIPTION_SCHEDULER :");\r
84                 pthread_create(&NSThread[i], NULL, NSSubScriptionSchedule, NULL);\r
85             }\r
86                 break;\r
87 \r
88             case NOTIFICATION_SCHEDULER:\r
89             {\r
90                 NS_LOG(DEBUG, "CASE NOTIFICATION_SCHEDULER :");\r
91                 pthread_create(&NSThread[i], NULL, NSNotificationSchedule, NULL);\r
92             }\r
93                 break;\r
94 \r
95             default:\r
96                 break;\r
97 \r
98         }\r
99 \r
100         NSHeadMsg[i] = NSTailMsg[i] = NULL;\r
101 \r
102         pthread_mutex_unlock(&NSMutex[i]);\r
103 \r
104     }\r
105 \r
106     return true;\r
107 }\r
108 \r
109 bool NSStopScheduler()\r
110 {\r
111     NS_LOG(DEBUG, "NSStopScheduler - IN");\r
112     int i = 0;\r
113 \r
114     for (i = THREAD_COUNT - 1; i >= 0; --i)\r
115     {\r
116 \r
117         NSIsRunning[i] = false;\r
118 \r
119         pthread_join(NSThread[i], (void *) NULL);\r
120         NSThread[i] = 0;\r
121 \r
122         pthread_mutex_lock(&NSMutex[i]);\r
123 \r
124         while (NSHeadMsg[i]->nextTask != NULL)\r
125         {\r
126             NSTask* temp = NSHeadMsg[i];\r
127             NSHeadMsg[i] = NSHeadMsg[i]->nextTask;\r
128             OICFree(temp);\r
129         }\r
130 \r
131         OICFree(NSHeadMsg[i]);\r
132 \r
133         pthread_mutex_unlock(&NSMutex[i]);\r
134     }\r
135 \r
136     NS_LOG(DEBUG, "NSStopScheduler - OUT");\r
137 \r
138     return true;\r
139 }\r
140 \r
141 void NSPushQueue(NSSchedulerType schedulerType, NSTaskType taskType, void* data)\r
142 {\r
143     pthread_mutex_lock(&NSMutex[schedulerType]);\r
144 \r
145     NS_LOG(DEBUG, "NSPushQueue - IN");\r
146     NS_LOG_V(DEBUG, "NSSchedulerType = %d", schedulerType);\r
147     NS_LOG_V(DEBUG, "NSTaskType = %d", taskType);\r
148 \r
149     if (NSHeadMsg[schedulerType] == NULL)\r
150     {\r
151         NSHeadMsg[schedulerType] = (NSTask*) malloc(sizeof(NSTask));\r
152         memset(NSHeadMsg[schedulerType], 0, sizeof(NSTask));\r
153         NSHeadMsg[schedulerType]->taskType = taskType;\r
154         NSHeadMsg[schedulerType]->taskData = data;\r
155         NSHeadMsg[schedulerType]->nextTask = NULL;\r
156         NSTailMsg[schedulerType] = NSHeadMsg[schedulerType];\r
157     }\r
158     else\r
159     {\r
160         NSTask* newNode = (NSTask*) malloc(sizeof(NSTask));\r
161         memset(newNode, 0, sizeof(NSTask));\r
162         newNode->taskType = taskType;\r
163         newNode->taskData = data;\r
164         newNode->nextTask = NULL;\r
165 \r
166         NSTailMsg[schedulerType]->nextTask = newNode;\r
167         NSTailMsg[schedulerType] = newNode;\r
168     }\r
169 \r
170     sem_post(&(NSSemaphore[schedulerType]));\r
171     NS_LOG(DEBUG, "NSPushQueue - OUT");\r
172     pthread_mutex_unlock(&NSMutex[schedulerType]);\r
173 }\r
174 \r