APAR status
Closed as program error.
Error description
In our SDL system, we have two similar blocks ('A' ? 'B') which both inherit from one common block ('C'). In blocks 'A' ? 'B', a static process dynamically creates a process from the inherited block 'C'. These all occur as the system initializes at the same time. During system operation, a signal from elsewhere in the system, which is routed by PID (saved in a variable when created) to the dynamic process in block 'B', is never seen to be received. Investigation into this revealed that both the dynamic processes created in 'A' and 'B' appear to have the same PID, for example '/Y39'. As the signal is routed by PID, it therefore goes astray, assumingly to 'A'. Further investigation into the tight integration framework brought our attention to the macro RTOSSDL_CREATE (the non- X_ONE_TASK_PER_INSTANCE_SET variant) where we established that the 'createdProcesses' count ? 'queuename' string gave the same values for both processes, thus the confused signal routing. This only occurs on our target (CAdvanced) build under QNX Neutrino RTOS, which is strongly based on the Telelogic/Rational Solaris integration files. It does not occur in the Windows-hosted Simulation (Cbasic build, Windows XP Pro). We predominantly use SDL Suite v4.4 patch 5, but it has been witnessed also on v6.3, which we will soon to move to completely. Also, if we put in a small delay (e.g. 5s) when the dynamic process is created in Block B, such that the processes are staggered, then it works correctly, each process PID is unique and the above signal is routed correctly. Business impact ( BusImpact ) Many days have been spent investigating the fault which has led us to the integration framework code. Even with a workaround for this specific case, it appears in certain circumstances, the fault could manifest elsewhere. Workaround: Fix was provided for the problem which was good for Telelogic SDL 4.4. An updated version of sctneutrino.h file was provided by development. The reason for the problem is during PId creation a global variable is referenced in a thread-unsafe style. So it is possible that 2 created processes get the same values from this variable and get the same PId. Fix requested for SDL 6.3.0.1 as which is currently being used to develop some new projects
Local fix
Problem summary
**************************************************************** * USERS AFFECTED: * **************************************************************** * PROBLEM DESCRIPTION: * **************************************************************** * RECOMMENDATION: * **************************************************************** The creation of PIDs are not thread safe for CAdvanced / Neutrino RTOS tight integration.
Problem conclusion
During PId creation a global variable was referenced in a thread-unsafe style and sometimes this could lead to different created processes getting the same PIDs. This problem has been fixed and sctneutrino.h from RTOS integrations has been updated.
Temporary fix
Comments
APAR Information
APAR number
PM73469
Reported component name
TLOGIC SDL SUIT
Reported component ID
5724V77SD
Reported release
630
Status
CLOSED PER
PE
NoPE
HIPER
NoHIPER
Special Attention
NoSpecatt
Submitted date
2012-09-24
Closed date
2012-11-29
Last modified date
2012-11-29
APAR is sysrouted FROM one or more of the following:
APAR is sysrouted TO one or more of the following:
Fix information
Fixed component name
TLOGIC SDL SUIT
Fixed component ID
5724V77SD
Applicable component levels
R630 PSN
UP
[{"Business Unit":{"code":"BU053","label":"Cloud & Data Platform"},"Product":{"code":"SSYR86","label":"Rational SDL Suite"},"Component":"","ARM Category":[],"Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"6.3","Edition":"","Line of Business":{"code":"LOB45","label":"Automation"}}]
Document Information
Modified date:
29 November 2012