279 |
|
bool |
280 |
|
RtraceSimulManager::UpdateMode() |
281 |
|
{ |
282 |
– |
rtFlags &= RTmask; |
282 |
|
if (!cookedCall) |
283 |
|
rtFlags &= ~RTdoFIFO; |
284 |
|
if (!traceCall) |
286 |
|
if (rtFlags & RTimmIrrad) |
287 |
|
rtFlags &= ~RTlimDist; |
288 |
|
|
289 |
< |
int misMatch = rtFlags ^ curFlags; |
289 |
> |
int misMatch = (rtFlags ^ curFlags) & RTmask; |
290 |
|
// updates based on toggled flags |
291 |
< |
if (misMatch & RTtraceSources) { |
291 |
> |
if (((misMatch & RTtraceSources) != 0) & (nsources > 0)) { |
292 |
> |
int nt = NThreads(); |
293 |
> |
if (nt > 1) { |
294 |
> |
if (FlushQueue() < 0) |
295 |
> |
return false; |
296 |
> |
SetThreadCount(1); |
297 |
> |
} |
298 |
|
int sn = nsources; |
299 |
|
if (rtFlags & RTtraceSources) { |
300 |
|
srcFollowed.NewBitMap(nsources); |
310 |
|
source[sn].sflags &= ~SFOLLOW; |
311 |
|
srcFollowed.NewBitMap(0); |
312 |
|
} |
313 |
+ |
if (nt > 1) SetThreadCount(nt); |
314 |
|
} |
315 |
|
if (misMatch & RTdoFIFO && FlushQueue() < 0) |
316 |
|
return false; |