@@ -62,6 +62,38 @@ int daemon_spawn(pid_t *pid)
62
62
return res ;
63
63
}
64
64
65
+ int daemon_terminate (service_t * service )
66
+ {
67
+ int res = 0 ;
68
+
69
+ if (service -> daemon_pid > 0 ) {
70
+ res = kill (service -> daemon_pid , SIGTERM );
71
+ if (res != 0 ) {
72
+ ERR ("kill failed, res=%d" , res );
73
+ return 1 ;
74
+ }
75
+ } else {
76
+ ERR ("PID not set: %d" , service -> daemon_pid );
77
+ return 2 ;
78
+ }
79
+
80
+
81
+ if (service -> execution_thread != (pthread_t ) NULL ) {
82
+ res = pthread_join (service -> execution_thread , NULL );
83
+ if (res != 0 ) {
84
+ ERR ("pthread_join failed, res=%d" , res );
85
+ return 3 ;
86
+ }
87
+ service -> execution_thread = (pthread_t ) NULL ;
88
+ }
89
+ else {
90
+ ERR ("Execution thread is not up" );
91
+ return 4 ;
92
+ }
93
+
94
+ return res ;
95
+ }
96
+
65
97
void * execution_task (void * data )
66
98
{
67
99
int res = 0 ;
@@ -151,19 +183,12 @@ int daemon_stop(service_t* service)
151
183
return 2 ;
152
184
}
153
185
154
- res = kill (service -> daemon_pid , SIGTERM );
186
+ res = daemon_terminate (service );
155
187
if (res != 0 ) {
156
- ERR ("kill failed, res=%d" , res );
188
+ ERR ("Daemon termination failed, res=%d" , res );
157
189
return 3 ;
158
190
}
159
191
160
- res = pthread_join (service -> execution_thread , NULL );
161
- if (res != 0 ) {
162
- ERR ("pthread_join failed, res=%d" , res );
163
- return 4 ;
164
- }
165
- service -> execution_thread = (pthread_t ) NULL ;
166
-
167
192
return 0 ;
168
193
}
169
194
0 commit comments