| 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; |