summaryrefslogtreecommitdiff
path: root/src/grt
diff options
context:
space:
mode:
Diffstat (limited to 'src/grt')
-rw-r--r--src/grt/grt-lib.ads4
-rw-r--r--src/grt/grt-processes.adb10
2 files changed, 10 insertions, 4 deletions
diff --git a/src/grt/grt-lib.ads b/src/grt/grt-lib.ads
index 4dac2c8..50be6a7 100644
--- a/src/grt/grt-lib.ads
+++ b/src/grt/grt-lib.ads
@@ -121,7 +121,7 @@ private
"__ghdl_std_ulogic_to_boolean_array");
pragma Export (C, Ghdl_Get_Resolution_Limit,
- "__ghdl_get_resolution_limit");
+ "std__env__get_resolution_limit");
pragma Export (Ada, Ghdl_Control_Simulation,
- "__ghdl_control_simulation");
+ "std__env__control_simulation");
end Grt.Lib;
diff --git a/src/grt/grt-processes.adb b/src/grt/grt-processes.adb
index 0a905d8..4a124e6 100644
--- a/src/grt/grt-processes.adb
+++ b/src/grt/grt-processes.adb
@@ -564,14 +564,20 @@ package body Grt.Processes is
is
Lock : constant Object_Lock_Acc := To_Lock_Acc_Acc (Obj).all;
begin
- if Lock.Process = null then
- if Lock.Count /= 0 then
+ if Lock.Count = 0 then
+ -- Protected object not locked.
+ if Lock.Process /= null then
+ -- Sanity check failed: count must be 0.
Internal_Error ("protected_enter");
end if;
+
+ -- Note: during elaboration, there is no current process.
Lock.Process := Get_Current_Process;
Lock.Count := 1;
else
+ -- Protected object already locked.
if Lock.Process /= Get_Current_Process then
+ -- Should be locked by the current process.
Internal_Error ("protected_enter(2)");
end if;
Lock.Count := Lock.Count + 1;