If multiple charts are talking to serial I/O, and one or more of those charts is suspended by the strategy, that chart may be suspended while holding a locked I/O unit. If the host task attempts to talk to that I/O unit, it will effectively lock up host communications. If the chart that continues the suspended chart also talks to the locked I/O unit, it may also be suspended. Example:
- Charts A and B talk to I/O unit
- Chart A acquires I/O unit 1
- Chart B suspends chart A, while A still holds I/O unit 1
- Chart B attempts to talk to I/O unit 1; since it is locked, Chart B suspends
Since chart A is started by chart B, and chart B is suspended, waiting for the I/O unit held by chart A, deadlock occurs, locking up both tasks. If the host then attempts to talk to the I/O unit, it will also pause indefinitely, requiring a power cycle to fix the problem.
Use synchronization variables to disallow the suspension of a chart while it accesses a serial I/O unit.
Opto 22 has resolved this issue.