Commit d69082fd authored by yoogx's avatar yoogx

Merge remote-tracking branch 'github/master'

parents 5f9fc7f9 e82f6254
# This script is adapted from https://github.com/AdaCore/Ada_Drivers_Library
# Thanks to AdaCore for providing it
# We are using Python 2.7 to run the testsuite
language: python
python:
- "2.7"
# Global variables
env:
global:
- TOOLS_DIR=$HOME/build_tools
- GNAT_TAR_PATH=$TOOLS_DIR/gnat-gpl-2016-x86_64-linux-bin.tar.gz
os:
- linux
# Cache directory that allows us to not download GNAT GPL every time, speeding
# up the process.
cache:
directories:
- $HOME/build_tools
install:
# Check if the GNAT package is already available in the cache directory. If
# not, download it.
- test -f $GNAT_TAR_PATH ||( mkdir -p $TOOLS_DIR && wget http://mirrors.cdn.adacore.com/art/5739cefdc7a447658e0b016b -O $GNAT_TAR_PATH)
# Extract GNAT from its package
- tar -xf $GNAT_TAR_PATH
# Add GNAT to $PATH
- export PATH=$PWD/gnat-gpl-2016-x86_64-linux-bin/bin/:$PATH
script:
# Show GNAT version for the record
- gcc --version
- gnatls -v
# Just build
#- ./support/reconfig && ./configure && make
- git clone https://github.com/OpenAADL/ocarina-build.git ; ( cd ocarina-build ; ./build_ocarina.sh --scenario=travis-ci )
\ No newline at end of file
This diff is collapsed.
Quick installation instructions for PolyORB-HI:
===============================================
Please refer to the PolyORB High Intergrity user's guide for more
detailed installation instructions.
BUILD REQUIREMENTS:
===================
- GCC (from the FSF) or GNAT GPL (http://libre.adacore.com/)
- The latest snapshot of the Ocarina AADL tool suite
Optionally, you can install :
- GNATforLEON (for the LEON_ORK platform),
- GNAT Pro 6.2.1 or later (for the LEON_GNAT platform)
BUILD AND INSTALLATION INSTRUCTIONS:
====================================
- Install GNAT and Ocarina as specified by their respective
documentations and make sure their 'bin' installation directories
is located at the top of your PATH environment variable.
- Issue ./configure
- Issue make && make install
To build the examples, and after installing PolyORB-HI, issue:
$> make examples
The generated code and the compiled nodes for each example are located
in examples/example_name/<main_aadl_system_name>
......@@ -25,11 +25,9 @@ po_hi_doc_dir=${shell $(CYGPATH_U) '$(OCARINA_PREFIX)/share/doc/ocarina'}
install-data-local:
$(MAKE) -C examples DESTDIR="$(DESTDIR)" install
$(INSTALL) -d $(DESTDIR)$(po_hi_doc_dir)
$(INSTALL_DATA) $(srcdir)/ChangeLog $(DESTDIR)$(po_hi_doc_dir)/ChangeLog_polyorb_hi_ada
uninstall-local:
$(MAKE) -C examples DESTDIR="$(DESTDIR)" uninstall
rm -f $(DESTDIR)$(po_hi_doc_dir)/ChangeLog_polyorb_hi_ada
debug-makefile:
@echo "GNATMAKE = $(GNATMAKE)"
......
New Features of PolyORB-HI:
v1.1 (2008-MM-DD): in addition to v1.0:
- Message PDU maximal size is deduced automatically from each
node data types (change 5386).
- The transport high level layer is now generated
automatically for each node (change 5385).
- New package hierarchy: PolyORB_HI is the root of all
non-generated services. PolyORB_HI_Generated is the root of
all generated services (change 5381 and 5382)
- Added support for AADL "timed" threads: periodic threads
that are also able to respond sporadically to external events
(changes 5365, 5366, 5367, 5368).
- Support of AADL threads that are connected with delayed
connexions (local case only) (changes 5340 and 5358)
v1.0 (2007-10-01): in addition to v0.9:
- New example, mode_switch to illustrate the thread mode switch
(change 5280).
- New example, flight_mgmt to illustrate the new communication
subsystem (change 5275).
- New communication subsystem based on the AADL standard
requirements. User code is able now to manipulate thread
interfaces through several runtime routines. These routines are
provided by the 'PolyORB_HI.Thread_Interrogators' generic which is
instantiated once for each thread (changes 5261-5274).
- New demo from SEI CMU, SunSeeker, that demonstrates how to build
a control system using AADL.
- New demo from IST-ASSERT, MPC, that demonstrates how to build a
replicated system with multiple instantiations of the same threads
on different nodes
- New demo to test the import of C functions, import
- PolyORB-HI now uses autoconf/automake
v0.9 (2007-03-07): in addition to v0.8:
- Renamed project to PolyORB-HI
- Split restriction configuration files to support more
restrictions for GNAT for HI Systems
- Added support for "pragma Priority" for protected objects
generated by Ocarina
- All examples are now running, tested on both native and LEON
targets
- Addition of the SOIF/MTS low level transport
- Simplify configuration by using ADA_PROJECT_PATH variable
v0.8 (2006-10-25): in addition to v0.7:
- Petri net model generation and graphical output from AADL models
are now integrated,
- the D3.1.3-1 Toy Example can now be fully generated using
Ocarina,
- updating AADL-to-code transformation rules,
- now automatically launches tsim when the compilation is
complete, and begins the execution of the compiled node
v0.7 (2006-09-29): in addition to v0.6:
- document the API of PolyORB HI,
- many additions to the POlyORB HI user guide,
- now the 'some_types' example is fully generated by Ocarina,
- added toy example from D3.1.3-1, tuned for Ocarina,
- provided a local version of AADL models for ping, for test with
LEON targets,
- added many new features in generate_ada.sh script to compile,
check and run each generated nodes,
- default target for makefile is now context sensitive and either
process the AADL scenario file, or build the application node,
- added support for schedulability analysis from AADL models using
Cheddar, see the RMA examples for more details,
- packaging now includes a binary version of ocarina, and a
command line tool based on cheddar to test for schedulability
v0.6 (2006-09-18): in addition to v0.5:
- added more debug information,
- added "erc32" rule to build with GNAT GAP 2006 for ERC32,
- added coding guidelines to the OPM,
- added release and debug build modes,
- added generic packages to ease code generation from Ocarina,
- corrected AADL 'ping' example for direct code generation from
Ocarina,
- now the 'ping' example is fully generated by Ocarina,
- added the 'producer_consumer' by M. Heitz,
v0.5 (2006-08-02): in addition to v0.4:
- updated all headers to match current licence,
- clean up in the tree superstructure.
v0.4 (2006-08-02): in addition to v0.3:
- remove most occurrences of slices,
- usual code reformatting, update, etc,
- addition of a documentation.
v0.3 (2006-08-01): in addition to v0.2:
- new "check" rule for makefiles, allow to check for all rules
defined in par 7.1 of D3.3.1-2/D3.3.1-2 deliverable,
- provide a low layer wrapper for transport mechanism, allowing
for multi-platform (sockets on native ones, empty on LEON for
now),
- added support to build with "GNAT for Leon",
- added a local test that does not depend on transport lower
layer, works with "GNAT for Leon".
v0.2 (2006-07-28): in addition to v0.1:
- include code reformatting, cleaning and documentation,
- support for more restrictions (see src/gnat.adc),
- new some_types example.
v0.1 (2006-07-26): initial prototype of PolyORB HI with
-distribution features. This initial release illustrates
deployment features with a simple ping example.
Here is a short description of the distribution:
* doc/: documentation,
* examples/: set of examples to test PolyORB HI
* share/: common files
* src/: core of PolyORB HI,
* ChangeLog: release information,
* COPYING: GPLv2 licence document,
* README: short description of the distribution.
* NEWS: The new added features
* INSTALL: Installation instructions
For quick build instructions, please refer to the INSTALL file
For more details on this distribution, please refer to doc/polyorb-hi_ug.pdf.
PolyORB-HI/Ada runtime
======================
[![Build Status](https://travis-ci.org/OpenAADL/polyorb-hi-ada.svg?branch=master)](https://travis-ci.org/OpenAADL/polyorb-hi-ada)
This is the PolyORB-HI/Ada runtime, a high-integrity middleware used
in conjunction with code generation from AADL models using Ocarina.
The recommended installation process is through the proper
configuration and installation of Ocarina, see Ocarina documentation
for details.
AC_PREREQ(2.57)
AC_INIT(PolyORB-HI/Ada, 1.1w, polyorb-hi-devel@listes.enst.fr)
AC_INIT(PolyORB-HI/Ada, 2017.1)
AC_CONFIG_SRCDIR(src)
AC_CONFIG_AUX_DIR(support)
......@@ -65,15 +65,15 @@ AM_CONDITIONAL(HAS_GNATMAKE_FOR_LEON_GNAT, [test ! "x$GNATMAKE_FOR_LEON_GNAT" =
if test "x$GNATMAKE_FOR_LEON" = "x"; then
AC_MSG_WARN([
${TAB}${TAB}${TAB} GNAT for LEON target has not been found.
${TAB}${TAB}${TAB} All examples using this platform will
${TAB}${TAB}${TAB} GNAT for LEON target has not been found.
${TAB}${TAB}${TAB} All examples using this platform will
${TAB}${TAB}${TAB} be disabled.])
fi
if test "x$GNATMAKE_FOR_LEON_GNAT" = "x"; then
AC_MSG_WARN([
${TAB}${TAB}${TAB} GNATPRO for LEON target has not been found.
${TAB}${TAB}${TAB} All examples using this platform will
${TAB}${TAB}${TAB} GNATPRO for LEON target has not been found.
${TAB}${TAB}${TAB} All examples using this platform will
${TAB}${TAB}${TAB} be disabled.])
fi
......@@ -88,8 +88,8 @@ AM_CONDITIONAL(HAS_TSIM_FOR_ERC32, [test ! "x$TSIM_FOR_ERC32" = "x"])
if test "x$GNATMAKE_FOR_ERC32" = "x"; then
AC_MSG_WARN([
${TAB}${TAB}${TAB} GNAT for ERC32 target has not been found.
${TAB}${TAB}${TAB} All examples using this platform will
${TAB}${TAB}${TAB} GNAT for ERC32 target has not been found.
${TAB}${TAB}${TAB} All examples using this platform will
${TAB}${TAB}${TAB} be disabled.])
fi
......@@ -99,8 +99,8 @@ AM_CONDITIONAL(HAS_GNATMAKE_FOR_MARTE, [test ! "x$GNATMAKE_FOR_MARTE" = "x"])
if test "x$GNATMAKE_FOR_MARTE" = "x"; then
AC_MSG_WARN([
${TAB}${TAB}${TAB} GNAT for MARTE target has not been found.
${TAB}${TAB}${TAB} All examples using this platform will
${TAB}${TAB}${TAB} GNAT for MARTE target has not been found.
${TAB}${TAB}${TAB} All examples using this platform will
${TAB}${TAB}${TAB} be disabled.])
fi
......@@ -193,7 +193,7 @@ prefix='$(OCARINA_PREFIX)'
dnl Important! One file per line, nothing before
dnl or after except whitespace! This section
dnl may, one day, be edited automatically to remove
dnl may, one day, be edited automatically to remove
dnl some entries.
AC_OUTPUT([
......@@ -204,7 +204,7 @@ AC_OUTPUT([
share/Makefile
share/make/Makefile
src/Makefile
src/drivers/Makefile
src/drivers/Makefile
src/polyorb_hi.gpr
examples/Makefile
examples/aadlv1/Makefile
......
......@@ -62,9 +62,11 @@ DOC_CODE_TEXIFILES = ${notdir $(DOC_CODE:.ads=.texi) \
$(DOC_CODE:.adb=-body.texi)}
AADL_TEXIFILES = ${notdir $(AADL_MODELS:.aadl=.texi)}
GUIDE_TEXIFILES = polyorb-hi_ug_ref.texi \
$(srcdir)/polyorb-hi-ada_api.texi $(SRC_CODE_TEXIFILES) \
$(DOC_CODE_TEXIFILES) $(AADL_TEXIFILES)
GENERATED_TEXIFILE= polyorb-hi_ug_ref.texi \
$(srcdir)/polyorb-hi-ada_api.texi
GUIDE_TEXIFILES = $(SRC_CODE_TEXIFILES) $(DOC_CODE_TEXIFILES) \
$(AADL_TEXIFILES)
EXTRA_DIST=\
$(GUIDE_TEXIFILES) \
......@@ -77,8 +79,6 @@ EXTRA_DIST=\
$(srcdir)/gfdl.texi \
$(srcdir)/conventions.texi \
$(srcdir)/polyorb-hi_ug_ref.tex \
polyorb-hi_ug_ref.bbl \
polyorb-hi_ug_ref.aux \
$(srcdir)/polyorb-hi_ug.bib \
$(FIGURES)
......@@ -87,7 +87,7 @@ polyorb_hi_ada_ug_TEXINFOS = $(GUIDE_TEXIFILES)
SUFFIXES = .ada .ads .adb .aadl .texi .sed .pdf .html
docs: $(GUIDE_TEXIFILES) $(GUIDE).html $(GUIDE).pdf
docs: $(GENERATED_TEXIFILE) $(GUIDE_TEXIFILES) $(GUIDE).html $(GUIDE).pdf
all-local: @DOC_TARGETS@
......
......@@ -2,7 +2,7 @@
@c $Id: polyorb-hi-ada_ug.texi 7043 2009-10-08 14:20:49Z hugues $
@include version.texi
@c @include version.texi
@setfilename polyorb-hi-ada_ug.info
@settitle PolyORB-HI User's Guide
......
/*
/*
* COPYRIGHT (c) 1989-2007.
* On-Line Applications Research Corporation (OAR).
*
......@@ -122,7 +122,7 @@ void parse_arguments(
}
printf( "\n" );
}
#endif
#endif
}
......@@ -134,7 +134,7 @@ void parse_arguments(
* of the "Ada environment task". Otherwise, we would be
* stuck with the defaults set by RTEMS.
*/
void *start_gnat_main( void * argument )
{
extern int gnat_main ( int argc, char **argv, char **envp );
......@@ -258,3 +258,13 @@ void *POSIX_Init( void *argument )
void _flush_cache() {}
#include <rtems/confdefs.h>
size_t _ada_pthread_minimum_stack_size( void )
{
/*
* Eventually this may need to include a per cpu family calculation
* but for now, this will do.
*/
return CONFIGURE_MINIMUM_TASK_STACK_SIZE * 2;
}
......@@ -48,9 +48,9 @@ with POHICDRIVER_IP;
-- This package provides support for the TCP_IP device driver as
-- defined in the tcp_protocol.aadl AADLv2 model.
package body PolyORB_HI_Drivers_Native_TCP_IP
with SPARK_Mode => Off
is
package body PolyORB_HI_Drivers_Native_TCP_IP is
pragma SPARK_Mode (Off);
pragma Suppress (Elaboration_Check, PolyORB_HI_Generated.Transport);
-- We do not want a pragma Elaborate_All to be implicitely
......
......@@ -35,6 +35,7 @@ with PolyORB_HI.Streams;
with PolyORB_HI.Utils;
package PolyORB_HI_Drivers_Native_TCP_IP is
pragma SPARK_Mode (Off);
use PolyORB_HI.Errors;
use PolyORB_HI_Generated.Deployment;
......
......@@ -16,7 +16,7 @@ pragma Locking_Policy (Ceiling_Locking); -- D.13.1
-- target: the code has Spark_Mode disabled in some occurences,
-- without this pragma the code would be rejected.
pragma Spark_Mode (On);
--pragma Spark_Mode (On);
--------------------------------------------------------------------------------
-- The following define restrictions to be supported by the
......
......@@ -29,8 +29,6 @@
-- --
------------------------------------------------------------------------------
with Ada.Synchronous_Task_Control;
with PolyORB_HI.Output;
with PolyORB_HI.Suspenders;
......@@ -41,11 +39,10 @@ package body PolyORB_HI.Background_Task is
use PolyORB_HI_Generated.Deployment;
use PolyORB_HI.Suspenders;
use Ada.Real_Time;
use Ada.Synchronous_Task_Control;
-----------------------
--------------------------
-- The_Background_Task --
-----------------------
-------------------------
task body The_Background_Task is
Error : Error_Kind;
......@@ -64,7 +61,7 @@ package body PolyORB_HI.Background_Task is
+ Entity_Image (Entity)
+ ": Wait initialization"));
Suspend_Until_True (Task_Suspension_Objects (Entity));
Block_Task (Entity);
delay until System_Startup_Time;
pragma Debug (Put_Line
......
......@@ -117,8 +117,10 @@ private
function Valid (Message : Message_Type) return Boolean is
(Message.First >= Message.Content'First
and then Message.First < Message.Last
and then Message.Last <= Message.Content'Last);
-- The following part cannot be correct in the case Message is
-- not initialized, see defaults for Message_Type
-- and then Message.First <= Message.Last
function Payload (M : Message_Type) return Stream_Element_Array is
(M.Content (M.First .. M.Last));
......
......@@ -29,8 +29,12 @@
-- --
------------------------------------------------------------------------------
pragma SPARK_MOde (Off);
with PolyORB_HI.Output_Low_Level;
with PolyORB_HI.Suspenders;
pragma Elaborate_All (PolyORB_HI.Suspenders);
with Ada.Real_Time;
with System;
......@@ -58,7 +62,6 @@ package body PolyORB_HI.Output is
end Output_Lock;
package body Output_Lock is
pragma SPARK_MOde (Off);
protected Lock is
-- This lock has been defined to guarantee thread-safe output
......@@ -164,7 +167,7 @@ package body PolyORB_HI.Output is
---------------------
procedure Unprotected_Put (Text : in String) is
Start_Time : Time renames PolyORB_HI.Suspenders.System_Startup_Time;
Start_Time : Time renames PolyORB_HI.Suspenders.System_Startup_Time;
Elapsed : Time_Span;
begin
if Start_Time = Time_First then
......
......@@ -31,6 +31,8 @@
-- Debug facility of PolyORB HI
pragma SPARK_Mode (Off);
with PolyORB_HI.Streams;
package PolyORB_HI.Output is
......
......@@ -29,6 +29,8 @@
-- --
------------------------------------------------------------------------------
pragma SPARK_Mode (Off);
package PolyORB_HI.Output_Low_Level is
procedure New_Line;
......
......@@ -29,6 +29,8 @@
-- --
------------------------------------------------------------------------------
pragma SPARK_Mode (Off);
with Interfaces.C;
with System;
......@@ -39,7 +41,6 @@ package body PolyORB_HI.Output_Low_Level is
---------
procedure Put (S : String)
with SPARK_Mode => Off
-- SPARK_Mode is distabled because of the Address attribute
is
procedure C_Write
......
......@@ -29,19 +29,20 @@
-- --
------------------------------------------------------------------------------
with Ada.Synchronous_Task_Control;
pragma SPARK_Mode (Off);
with PolyORB_HI.Output;
with PolyORB_HI.Suspenders;
pragma Elaborate_All (PolyORB_HI.Suspenders);
package body PolyORB_HI.Periodic_Task is
use Ada.Real_Time;
use PolyORB_HI.Errors;
use PolyORB_HI.Output;
use Ada.Real_Time;
use PolyORB_HI.Suspenders;
use PolyORB_HI_Generated.Deployment;
use Ada.Synchronous_Task_Control;
Next_Deadline_Val : Time;
......@@ -64,7 +65,7 @@ package body PolyORB_HI.Periodic_Task is
+ Entity_Image (Entity)
+ ": Wait initialization"));
Suspend_Until_True (Task_Suspension_Objects (Entity));
Block_Task (Entity);
Next_Start := System_Startup_Time + Dispatch_Offset;
delay until Next_Start;
......@@ -96,6 +97,10 @@ package body PolyORB_HI.Periodic_Task is
-- Put_Line (Normal, "Lag: " +
-- Duration'Image (To_Duration (Next_Start - T)));
-- end if;
pragma Debug
(Put_Line
(Verbose,
"Periodic Task " + Entity_Image (Entity) + ": End of Cycle"));
delay until Next_Start;
Next_Start := Next_Start + Task_Period;
......
......@@ -28,9 +28,9 @@
-- (taste-users@lists.tuxfamily.org) --
-- --
------------------------------------------------------------------------------
pragma SPARK_Mode (Off);
-- Define a periodic task that executes a Job
with System;
with Ada.Real_Time;
with PolyORB_HI.Errors;
......
......@@ -30,6 +30,7 @@
------------------------------------------------------------------------------
with PolyORB_HI.Marshallers_G;
pragma Elaborate_All (PolyORB_HI.Marshallers_G);
with Interfaces;
package PolyORB_HI.Port_Type_Marshallers is
......
......@@ -29,19 +29,16 @@
-- --
------------------------------------------------------------------------------
with Ada.Synchronous_Task_Control;
with PolyORB_HI.Output;
with PolyORB_HI.Suspenders;
package body PolyORB_HI.Sporadic_Task is
use Ada.Real_Time;
use PolyORB_HI.Errors;
use PolyORB_HI.Output;
use PolyORB_HI_Generated.Deployment;
use PolyORB_HI.Suspenders;
use Ada.Real_Time;
use Ada.Synchronous_Task_Control;
Next_Deadline_Val : Time;
......@@ -68,8 +65,8 @@ package body PolyORB_HI.Sporadic_Task is
+ Entity_Image (Entity)
+ ": Wait initialization"));
Suspend_Until_True (Task_Suspension_Objects (Entity));
-- delay until System_Startup_Time;
Block_Task (Entity);
delay until System_Startup_Time;
pragma Debug (Put_Line
(Verbose,
......
......@@ -29,23 +29,39 @@
-- --
------------------------------------------------------------------------------
with PolyORB_HI.Output;
with Ada.Synchronous_Task_Control; use Ada.Synchronous_Task_Control;
pragma Elaborate_All (Ada.Synchronous_Task_Control);
package body PolyORB_HI.Suspenders is
pragma SPARK_Mode (Off);
use Ada.Real_Time;
use PolyORB_HI.Output;
Task_Suspension_Objects : array (Entity_Type'Range) of Suspension_Object;
-- This array is used so that each task waits on its corresponding
-- suspension object until the transport layer initialization is
-- complete. We are obliged to do so since Ravenscar forbids that
-- more than one task wait on a protected object entry.
-- The_Suspender : Suspension_Object;
-- XXX: we cannot use the suspension object because of
-- gnatforleon 2.0w5
----------------
-- Block_Task --
----------------
procedure Block_Task (Entity : Entity_Type) is
begin
Suspend_Until_True (Task_Suspension_Objects (Entity));
end Block_Task;
---------------------
-- Suspend_Forever --
---------------------
procedure Suspend_Forever
with SPARK_Mode => Off
-- with SPARK_Mode => Off
-- XXX: delay until not supported in GNATProve GPL2014
is
begin
......@@ -61,27 +77,12 @@ package body PolyORB_HI.Suspenders is
-----------------------
procedure Unblock_All_Tasks is
pragma Suppress (Range_Check);
begin
System_Startup_Time :=
Ada.Real_Time.Clock + Ada.Real_Time.Milliseconds (1_000);
pragma Debug
(Put_Line
(Verbose, "Initialization finished, system startup in 1 second(s)"));
for J in Task_Suspension_Objects'Range loop
pragma Debug
(Put_Line
(Verbose, "Unblocking task "
+ PolyORB_HI_Generated.Deployment.Entity_Image (J)));
Set_True (Task_Suspension_Objects (J));
pragma Debug
(Put_Line
(Verbose, "Task "
+ PolyORB_HI_Generated.Deployment.Entity_Image (J)
+ " unblocked"));
for Obj of Task_Suspension_Objects loop
Set_True (Obj);
end loop;
end Unblock_All_Tasks;
......
......@@ -29,31 +29,27 @@
-- --
------------------------------------------------------------------------------
-- This package holds a routine to suspend the main application task
-- This package implements routines to suspend application tasks
pragma SPARK_Mode (Off);
with Ada.Synchronous_Task_Control;
with Ada.Real_Time;
with PolyORB_HI_Generated.Deployment;
pragma Elaborate_All (PolyORB_HI_Generated.Deployment);
package PolyORB_HI.Suspenders is
use Ada.Synchronous_Task_Control;
use PolyORB_HI_Generated.Deployment;
use type Ada.Real_Time.Time;
procedure Suspend_Forever;
-- Suspends for ever each task that call it
Task_Suspension_Objects : array (Entity_Type'Range) of Suspension_Object;
-- This array is used so that each task waits on its corresponding
-- suspension object until the transport layer initialization is
-- complete. We are obliged to do so since Ravenscar forbids that
-- more than one task wait on a protected object entry.
System_Startup_Time : Ada.Real_Time.Time := Ada.Real_Time.Time_First;
-- Startup time of user tasks
procedure Block_Task (Entity : Entity_Type);
-- Block a task until Unblock_All_Tasks is called.
procedure Unblock_All_Tasks;