Lines 63-70
Link Here
|
63 |
mutex.lock(); |
63 |
mutex.lock(); |
64 |
stack.push(_cmd); |
64 |
stack.push(_cmd); |
65 |
nPendingCommand++; |
65 |
nPendingCommand++; |
66 |
worker.wakeOne(); |
|
|
67 |
mutex.unlock(); |
66 |
mutex.unlock(); |
|
|
67 |
//worker.wakeOne(); after mutex.unlock(); seems better !? |
68 |
worker.wakeOne(); |
68 |
|
69 |
|
69 |
mDebugOut << endl; |
70 |
mDebugOut << endl; |
70 |
} |
71 |
} |
Lines 94-99
Link Here
|
94 |
} |
95 |
} |
95 |
|
96 |
|
96 |
|
97 |
|
|
|
98 |
// Soft Kill the copyjob |
99 |
// If You kill an already killed copyjob this cause : Kget get signal 11 and it terminates !!! |
100 |
void Slave::softkilljob() |
101 |
{ |
102 |
if (copyjob) |
103 |
{ |
104 |
copyjob->kill(true); |
105 |
copyjob = NULL; |
106 |
} |
107 |
} |
97 |
|
108 |
|
98 |
void Slave::run() |
109 |
void Slave::run() |
99 |
{ |
110 |
{ |
Lines 109-115
Link Here
|
109 |
switch (cmd = fetch_cmd()) |
120 |
switch (cmd = fetch_cmd()) |
110 |
{ |
121 |
{ |
111 |
case RESTART: |
122 |
case RESTART: |
112 |
copyjob->kill(true); |
123 |
//copyjob->kill(true); |
|
|
124 |
softkilljob(); |
113 |
// fall through |
125 |
// fall through |
114 |
case RETR: |
126 |
case RETR: |
115 |
mDebug << " FETCHED COMMAND RETR" << endl; |
127 |
mDebug << " FETCHED COMMAND RETR" << endl; |
Lines 122-172
Link Here
|
122 |
|
134 |
|
123 |
case PAUSE: |
135 |
case PAUSE: |
124 |
mDebug << " FETCHED COMMAND PAUSE" << endl; |
136 |
mDebug << " FETCHED COMMAND PAUSE" << endl; |
125 |
copyjob->kill(true); |
137 |
// Here there was a BUG ! |
126 |
copyjob = 0L; |
138 |
// You want kill an already killed copyjob ! |
|
|
139 |
softkilljob(); |
140 |
//copyjob->kill(true); |
141 |
//copyjob = 0L; |
127 |
PostMessage(SLV_PAUSED); |
142 |
PostMessage(SLV_PAUSED); |
128 |
break; |
143 |
break; |
129 |
|
144 |
|
130 |
case KILL: |
145 |
case KILL: |
131 |
mDebug << " FETCHED COMMAND KILL" << endl; |
146 |
mDebug << " FETCHED COMMAND KILL" << endl; |
132 |
running = false; |
147 |
running = false; |
133 |
if (copyjob) |
148 |
// Here there was an other BUG ! |
134 |
{ |
149 |
// You want to kill an already killed copyjob ! |
135 |
copyjob->kill(true); |
150 |
softkilljob(); |
136 |
copyjob = 0L; |
|
|
137 |
} |
138 |
// no message posted |
151 |
// no message posted |
139 |
break; |
152 |
break; |
140 |
|
153 |
|
141 |
case REMOVE: |
154 |
case REMOVE: |
142 |
mDebug << " FETCHED COMMAND REMOVE" << endl; |
155 |
mDebug << " FETCHED COMMAND REMOVE" << endl; |
143 |
running = false; |
156 |
running = false; |
144 |
copyjob->kill(true); |
157 |
softkilljob(); |
145 |
copyjob = 0L; |
|
|
146 |
PostMessage(SLV_REMOVED); |
158 |
PostMessage(SLV_REMOVED); |
147 |
break; |
159 |
break; |
148 |
|
160 |
|
149 |
case SCHEDULE: |
161 |
case SCHEDULE: |
150 |
mDebug << " FETCHED COMMAND SCHEDULE" << endl; |
162 |
mDebug << " FETCHED COMMAND SCHEDULE" << endl; |
151 |
copyjob->kill(true); |
163 |
softkilljob(); |
152 |
copyjob = 0L; |
|
|
153 |
PostMessage(SLV_SCHEDULED); |
164 |
PostMessage(SLV_SCHEDULED); |
154 |
break; |
165 |
break; |
155 |
|
166 |
|
156 |
case DELAY: |
167 |
case DELAY: |
157 |
mDebug << " FETCHED COMMAND DELAY" << endl; |
168 |
mDebug << " FETCHED COMMAND DELAY" << endl; |
158 |
copyjob->kill(true); |
169 |
softkilljob(); |
159 |
copyjob = 0L; |
|
|
160 |
PostMessage(SLV_DELAYED); |
170 |
PostMessage(SLV_DELAYED); |
161 |
break; |
171 |
break; |
162 |
|
172 |
|
|
|
173 |
//Soft Thread Termination |
174 |
case SOFTTERM: |
175 |
|
163 |
case NOOP: |
176 |
case NOOP: |
164 |
mDebug << "FETCHED COMMAND NOOP, i.e. empty stack" << endl; |
177 |
mDebug << "FETCHED COMMAND NOOP, i.e. empty stack" << endl; |
165 |
if ( copyjob ) |
178 |
softkilljob(); |
166 |
{ |
|
|
167 |
copyjob->kill(true); |
168 |
copyjob = 0L; |
169 |
} |
170 |
running = false; |
179 |
running = false; |
171 |
break; |
180 |
break; |
172 |
|
181 |
|
Lines 177-183
Link Here
|
177 |
} |
186 |
} |
178 |
} |
187 |
} |
179 |
|
188 |
|
180 |
copyjob = NULL; |
189 |
// not needed !? |
|
|
190 |
//copyjob = NULL; |
181 |
mDebugOut << endl; |
191 |
mDebugOut << endl; |
182 |
} |
192 |
} |
183 |
|
193 |
|
Lines 238-250
Link Here
|
238 |
mDebugIn << endl; |
248 |
mDebugIn << endl; |
239 |
if (job->error()) { |
249 |
if (job->error()) { |
240 |
InfoMessage(job->errorString()); |
250 |
InfoMessage(job->errorString()); |
241 |
terminate(); // AEEIIII! |
251 |
// DO NOT KILL a copyjob already finished ! This cause crash ! |
242 |
wait(); |
252 |
copyjob=NULL; |
|
|
253 |
Op(SOFTTERM); |
254 |
// NOT SAFE !!! |
255 |
//terminate(); // AEEIIII! |
256 |
//wait(); |
243 |
PostMessage(SLV_DELAYED); |
257 |
PostMessage(SLV_DELAYED); |
244 |
} else |
258 |
} else |
245 |
{ |
259 |
{ |
246 |
terminate(); // AEEIIII! |
260 |
// DO NOT KILL a copyjob already finished ! This cause crash ! |
247 |
wait(); |
261 |
copyjob=NULL; |
|
|
262 |
Op(SOFTTERM); |
263 |
// NOT SAFE !!! |
264 |
//terminate(); // AEEIIII! |
265 |
//wait(); |
248 |
PostMessage(SLV_FINISHED); |
266 |
PostMessage(SLV_FINISHED); |
249 |
} |
267 |
} |
250 |
mDebugOut << endl; |
268 |
mDebugOut << endl; |