Loading and initialization of the records during run-time after iocInit
Loading and initialization of the EPICS records during run-time are very useful for hot-swap device control (like MicroTCA), so that we do not need to reboot the IOC everytime a new card is plugged in. A group of APIs of "dbRecordDynamic" are introduced to the EPICS base to perform the dynamic records loading. A routine of "dbLockSetCreate" is added to the "dbLock.c" to create new lockset for the newly loaded record. The module follows similar procedure of iocInit but with some more steps to handle the dynamic issues, like the conflict between the new record and existing records. The module has been tested locally at SLAC and I would like more people to review it and even consider it for the future development of epics base
Blueprint information
- Status:
- Not started
- Approver:
- None
- Priority:
- Undefined
- Drafter:
- Zheqiao Geng
- Direction:
- Needs approval
- Assignee:
- Zheqiao Geng
- Definition:
- New
- Series goal:
- None
- Implementation:
- Unknown
- Milestone target:
- None
- Started by
- Completed by
Whiteboard
This proposal made no attempt to understand or protect against attempts to access the record from other threads while the IOC is still running. For example, CA searches can occur at almost any time and will traverse the database structures trying to match the record name against a channel name.
This implementation cannot easily be fixed, because there is no suitable locking in the database structures. A lot more work will be needed to be able to do record creation at runtime safely.