Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
simgrid.git
2 years ago[DVFS] Use sg_host_get_avg_load() & reset the load
Christian Heinrich [Wed, 28 Feb 2018 15:09:08 +0000 (16:09 +0100)]
[DVFS] Use sg_host_get_avg_load() & reset the load

2 years ago[DVFS] Add class documentation
Christian Heinrich [Wed, 28 Feb 2018 14:53:22 +0000 (15:53 +0100)]
[DVFS] Add class documentation

2 years ago[EXAMPLES] Make the HostLoad example more difficult
Christian Heinrich [Mon, 26 Feb 2018 15:54:44 +0000 (16:54 +0100)]
[EXAMPLES] Make the HostLoad example more difficult

This test now contains more intricate scenarios:
- Change the speed of a host while a computation is running
- Verify that the average load is correctly computed

2 years ago[DVFS] Update HostDvfs class documentation
Christian Heinrich [Fri, 23 Feb 2018 13:41:32 +0000 (14:41 +0100)]
[DVFS] Update HostDvfs class documentation

2 years ago[SMPI] Use Actor->getHost() instead of Actor->getImpl()->host
Christian Heinrich [Tue, 20 Feb 2018 17:14:00 +0000 (18:14 +0100)]
[SMPI] Use Actor->getHost() instead of Actor->getImpl()->host

2 years ago[TOOLS] Call-Location Tracing: Add more macros for Fortran
Christian Heinrich [Tue, 20 Feb 2018 17:07:32 +0000 (18:07 +0100)]
[TOOLS] Call-Location Tracing: Add more macros for Fortran

While LU uses MPI calls in all upper case, EP uses
them in all lower case. This means that the current definitions
were not enough to trace both EP and LU. This patch changes that.
The ucfirst call is necessary since otherwise, a recursion might
break compilation.

2 years ago[DVFS] Fix getAverageLoad(): Use theor_max_flops
Christian Heinrich [Thu, 15 Feb 2018 14:15:48 +0000 (15:15 +0100)]
[DVFS] Fix getAverageLoad(): Use theor_max_flops

2 years ago[DVFS] Fix reset() and getCurrentLoad()
Christian Heinrich [Thu, 15 Feb 2018 14:14:51 +0000 (15:14 +0100)]
[DVFS] Fix reset() and getCurrentLoad()

2 years ago[DVFS] Fix the update() method.
Christian Heinrich [Thu, 15 Feb 2018 14:14:00 +0000 (15:14 +0100)]
[DVFS] Fix the update() method.

The update() will be called AFTER a pstate has already
been changed; this implies that we need to keep track
of what pstate was active before the change in order to
update the flops already computed correctly.

2 years ago[DVFS] Add function sg_host_get_avg_load(host)
Christian Heinrich [Thu, 15 Feb 2018 14:09:37 +0000 (15:09 +0100)]
[DVFS] Add function sg_host_get_avg_load(host)

2 years ago[DVFS] Add function sg_host_get_idle_time(host)
Christian Heinrich [Thu, 15 Feb 2018 14:08:19 +0000 (15:08 +0100)]
[DVFS] Add function sg_host_get_idle_time(host)

2 years ago[DVFS] Add several new member vars for new features
Christian Heinrich [Thu, 15 Feb 2018 14:10:38 +0000 (15:10 +0100)]
[DVFS] Add several new member vars for new features

2 years ago[DVFS] Move config names to a const variable
Christian Heinrich [Wed, 14 Feb 2018 13:46:42 +0000 (14:46 +0100)]
[DVFS] Move config names to a const variable

2 years agoMerge branch 'master' of git+ssh://scm.gforge.inria.fr//gitroot/simgrid/simgrid
Frederic Suter [Wed, 28 Feb 2018 17:17:19 +0000 (18:17 +0100)]
Merge branch 'master' of git+ssh://scm.gforge.inria.fr//gitroot/simgrid/simgrid

2 years agoextend the example with another type of Zone
Frederic Suter [Wed, 28 Feb 2018 17:16:17 +0000 (18:16 +0100)]
extend the example with another type of Zone
If the cluster is a dragonfly, display the coordinates for each host

2 years agoPlease scan-build.
Arnaud Giersch [Wed, 28 Feb 2018 16:36:28 +0000 (17:36 +0100)]
Please scan-build.

2 years agoFix memory leaks.
Arnaud Giersch [Tue, 27 Feb 2018 09:37:08 +0000 (10:37 +0100)]
Fix memory leaks.

2 years agomake the getNetzoneByType usable and tested
Frederic Suter [Wed, 28 Feb 2018 16:07:11 +0000 (17:07 +0100)]
make the getNetzoneByType usable and tested

2 years ago[code] allow s4u::Mailbox::setReceiver(nullptr)
Millian Poquet [Tue, 27 Feb 2018 12:56:24 +0000 (13:56 +0100)]
[code] allow s4u::Mailbox::setReceiver(nullptr)

2 years agosince update, flang is now identified as flang by cmake, and not pgi anymore
Augustin Degomme [Sat, 24 Feb 2018 10:15:01 +0000 (11:15 +0100)]
since update, flang is now identified as flang by cmake, and not pgi anymore

2 years agoattempt of a function searching all zones of a given type
Martin Quinson [Fri, 23 Feb 2018 20:45:29 +0000 (21:45 +0100)]
attempt of a function searching all zones of a given type

This is related to #253, but it's probably not sufficient. We'd need
an example of use, at least. I'm just pushing to make it public.

2 years agoMerge branch 'master' of git+ssh://scm.gforge.inria.fr//gitroot/simgrid/simgrid
Frederic Suter [Fri, 23 Feb 2018 20:44:23 +0000 (21:44 +0100)]
Merge branch 'master' of git+ssh://scm.gforge.inria.fr//gitroot/simgrid/simgrid

2 years agoCheck for negative size (and please scan-build).
Arnaud Giersch [Wed, 14 Feb 2018 16:42:08 +0000 (17:42 +0100)]
Check for negative size (and please scan-build).

2 years agoRename two more files in msg/app-bittorrent/.
Arnaud Giersch [Tue, 13 Feb 2018 16:28:02 +0000 (17:28 +0100)]
Rename two more files in msg/app-bittorrent/.

2 years ago[tesh] pgid func fail: catch * -> catch OSError
Millian Poquet [Thu, 22 Feb 2018 15:44:24 +0000 (16:44 +0100)]
[tesh] pgid func fail: catch * -> catch OSError

2 years ago[tesh] DO_NOT_CLEAN_SUBPROCESSES constant -> None
Millian Poquet [Thu, 22 Feb 2018 15:43:00 +0000 (16:43 +0100)]
[tesh] DO_NOT_CLEAN_SUBPROCESSES constant -> None

2 years ago[tesh] psychorigid try/except to avoid vexing bsd
Millian Poquet [Thu, 22 Feb 2018 15:10:20 +0000 (16:10 +0100)]
[tesh] psychorigid try/except to avoid vexing bsd

2 years agoMore on the graphical documentation TOC and use it
Martin Quinson [Wed, 21 Feb 2018 22:19:30 +0000 (23:19 +0100)]
More on the graphical documentation TOC and use it

Thanks Fred for the feedback

2 years agoMerge branch 'master' of scm.gforge.inria.fr:/gitroot/simgrid/simgrid
Martin Quinson [Wed, 21 Feb 2018 22:04:42 +0000 (23:04 +0100)]
Merge branch 'master' of scm.gforge.inria.fr:/gitroot/simgrid/simgrid

2 years agobetter separation between APIs and application domains
Martin Quinson [Wed, 21 Feb 2018 22:04:36 +0000 (23:04 +0100)]
better separation between APIs and application domains

2 years agoMerge branch 'master' of git+ssh://scm.gforge.inria.fr//gitroot/simgrid/simgrid
Frederic Suter [Wed, 21 Feb 2018 17:42:19 +0000 (18:42 +0100)]
Merge branch 'master' of git+ssh://scm.gforge.inria.fr//gitroot/simgrid/simgrid

2 years ago[examples] add s4u-actor-kill-pid example
Millian Poquet [Wed, 21 Feb 2018 17:00:22 +0000 (18:00 +0100)]
[examples] add s4u-actor-kill-pid example

This example is very similar to s4u-actor-kill, but tests
the static s4u::Actor::kill(aid_t) method instead of
s4u::Actor::kill(void).

2 years ago[tesh] cleanup on SIGINT and SIGTERM
Millian Poquet [Wed, 21 Feb 2018 16:12:39 +0000 (17:12 +0100)]
[tesh] cleanup on SIGINT and SIGTERM

2 years ago[tesh] cleanup: SIGKILL -> SIGTERM
Millian Poquet [Mon, 19 Feb 2018 12:39:43 +0000 (13:39 +0100)]
[tesh] cleanup: SIGKILL -> SIGTERM

2 years agoextra check on actions
Frederic Suter [Tue, 20 Feb 2018 21:20:33 +0000 (22:20 +0100)]
extra check on actions

if another model than ptaskL07 is used, it appears that some actions
are seen that are not attached to tasks. skipped them, simdag does
nothing with it.

2 years agocosmetics
Frederic Suter [Tue, 20 Feb 2018 20:59:09 +0000 (21:59 +0100)]
cosmetics

2 years agoNew attempt of a project's big picture
Martin Quinson [Tue, 20 Feb 2018 20:14:22 +0000 (21:14 +0100)]
New attempt of a project's big picture

2 years agofix Javadoc
Frederic Suter [Tue, 20 Feb 2018 19:57:05 +0000 (20:57 +0100)]
fix Javadoc
prevented lib_in_jar build

2 years ago[tesh] kill process -> kill whole process group
Millian Poquet [Mon, 19 Feb 2018 10:52:25 +0000 (11:52 +0100)]
[tesh] kill process -> kill whole process group

If the command launched by tesh executes some subprocesses
(which are not cleaned by the root process on SIGKILL)
the previous code let such subprocesses in a running state.

Now the root process is launched into a new session (man setsid)
and the whole session is killed by tesh. All subprocess should be killed
as long as the session is not changed in the process tree.

Traversing the process tree could also be done, but it may require
additional dependencies (i.e., psutil).

2 years agosonar don't like fields nor parameters ending with a _, so don't do it
Martin Quinson [Sun, 18 Feb 2018 16:45:33 +0000 (17:45 +0100)]
sonar don't like fields nor parameters ending with a _, so don't do it

Plus, inform sonar that SimGrid 3.18 was released since a while

2 years agoActivate NS3 builds when it's installed through debian
Martin Quinson [Sun, 18 Feb 2018 15:43:02 +0000 (16:43 +0100)]
Activate NS3 builds when it's installed through debian

But don't do it on MC builds

2 years agodo not mix the enums (good catch, sonar)
Martin Quinson [Sun, 18 Feb 2018 15:10:21 +0000 (16:10 +0100)]
do not mix the enums (good catch, sonar)

2 years agosonar prefers dupplicated code to missing breaks
Martin Quinson [Sun, 18 Feb 2018 14:53:04 +0000 (15:53 +0100)]
sonar prefers dupplicated code to missing breaks

And clangs agrees on this one.

2 years agofinish the s/FULLDUPLEX/SPLITDUPLEX/
Martin Quinson [Sun, 18 Feb 2018 12:07:34 +0000 (13:07 +0100)]
finish the s/FULLDUPLEX/SPLITDUPLEX/

2 years agos/FULLDUPLEX/SPLITDUPLEX/ in the documentation
Martin Quinson [Sun, 18 Feb 2018 10:51:40 +0000 (11:51 +0100)]
s/FULLDUPLEX/SPLITDUPLEX/ in the documentation

2 years agohte doc should not speak of AS anymore
Martin Quinson [Fri, 16 Feb 2018 23:27:06 +0000 (00:27 +0100)]
hte doc should not speak of AS anymore

2 years agos/fullduplex/splitduplex/ in platform parsing (backward compatible, with a warning)
Martin Quinson [Fri, 16 Feb 2018 22:52:47 +0000 (23:52 +0100)]
s/fullduplex/splitduplex/ in platform parsing (backward compatible, with a warning)

2 years agouse SPLITDUPLEX internally instead of FULLDUPLEX
Martin Quinson [Fri, 16 Feb 2018 20:50:47 +0000 (21:50 +0100)]
use SPLITDUPLEX internally instead of FULLDUPLEX

We will s/FULLDUPLEX/SPLITDUPLEX/ everywhere in SimGrid. Rational:

That sharing mode is modeled by spliting every link between two links:
one uplink used when traversing the link in a direction, and the
downlink when we traverse the same link in the other direction.

With SHARED links, the bandwidth is shared between all flows without
taking the flow direction into account.

So, SPLITDUPLEX is the way we model fullduplex links, but at the end,
each of the SimGrid link in a SPLITDUPLEX (either the up or down link)
can be used in one direction only. That's the right model, but using
FULLDUPLEX for the situation where you have 2 links was rather
disturbing.

And yes, users will soon notice, when they will try to use network
energy models.

2 years agoRevert "switch default smpi privatization to mmap, as tsan is now allergic to RTLD_DE...
Augustin Degomme [Fri, 16 Feb 2018 23:12:49 +0000 (00:12 +0100)]
Revert "switch default smpi privatization to mmap, as tsan is now allergic to RTLD_DEEPBIND"

This reverts commit c42ed4092ce78e88b5de1a4623c19d3d9d912d3d.

2 years agosonar: don't mask fields with parameters in Java
Martin Quinson [Fri, 16 Feb 2018 12:56:29 +0000 (13:56 +0100)]
sonar: don't mask fields with parameters in Java

2 years agosonar: dont escape LF in string literals
Martin Quinson [Fri, 16 Feb 2018 12:36:51 +0000 (13:36 +0100)]
sonar: dont escape LF in string literals

2 years agosonar: don't use auto for pointers, but auto*
Martin Quinson [Fri, 16 Feb 2018 12:33:44 +0000 (13:33 +0100)]
sonar: don't use auto for pointers, but auto*

2 years agodon't use deepbind in cases it's not needed (I think)
degomme [Fri, 16 Feb 2018 10:00:00 +0000 (11:00 +0100)]
don't use deepbind in cases it's not needed (I think)

2 years agoswitch default smpi privatization to mmap, as tsan is now allergic to RTLD_DEEPBIND
degomme [Fri, 16 Feb 2018 09:01:47 +0000 (10:01 +0100)]
switch default smpi privatization to mmap, as tsan is now allergic to RTLD_DEEPBIND
This should not work for the -dlopen tests, but it should be better

2 years agowoops, bash typo
Martin Quinson [Fri, 16 Feb 2018 06:57:23 +0000 (07:57 +0100)]
woops, bash typo

And cleanup before installation

2 years agoplease MC builds, don't install your stuff
Martin Quinson [Wed, 14 Feb 2018 22:48:07 +0000 (23:48 +0100)]
please MC builds, don't install your stuff

2 years agotry to reduce the amount of warnings in StarPU compilation
Martin Quinson [Wed, 14 Feb 2018 19:23:01 +0000 (20:23 +0100)]
try to reduce the amount of warnings in StarPU compilation

2 years ago[DVFS] Clean up the mess I made before; move to unique_ptr
Christian Heinrich [Wed, 14 Feb 2018 10:35:08 +0000 (11:35 +0100)]
[DVFS] Clean up the mess I made before; move to unique_ptr

2 years ago[DVFS] Move plugin::HostDvfs to plugin::dvfs::HostDvfs
Christian Heinrich [Tue, 13 Feb 2018 16:30:59 +0000 (17:30 +0100)]
[DVFS] Move plugin::HostDvfs to plugin::dvfs::HostDvfs

2 years ago[DVFS] Make debug statement more verbose
Christian Heinrich [Tue, 13 Feb 2018 16:30:28 +0000 (17:30 +0100)]
[DVFS] Make debug statement more verbose

2 years ago[DVFS] Added 'override' specifier
Christian Heinrich [Tue, 13 Feb 2018 16:29:51 +0000 (17:29 +0100)]
[DVFS] Added 'override' specifier

2 years ago[KERNEL] Simple spelling fix
Christian Heinrich [Mon, 12 Feb 2018 16:31:40 +0000 (17:31 +0100)]
[KERNEL] Simple spelling fix

2 years ago[PLUGIN] Remove local variable and comment in host_load.cpp
Christian Heinrich [Thu, 8 Feb 2018 10:07:30 +0000 (11:07 +0100)]
[PLUGIN] Remove local variable and comment in host_load.cpp

2 years ago[DVFS] Cosmetics as proposed by clang-format
Christian Heinrich [Wed, 7 Feb 2018 13:18:07 +0000 (14:18 +0100)]
[DVFS] Cosmetics as proposed by clang-format

2 years ago[DVFS] Make governors individually configurable for each host
Christian Heinrich [Wed, 7 Feb 2018 13:16:10 +0000 (14:16 +0100)]
[DVFS] Make governors individually configurable for each host

Add this to your host tag:
  - <prop id=plugin/dvfs/governor value=performance />

Valid values as of now are: performance, powersave, ondemand, conservative
It doesn't matter if you use uppercase or lowercase.

For the sampling rate, use this:

  - <prop id=plugin/dvfs/sampling_rate value=2 />

This will run the update() method of the specified governor every 2 seconds
on that host.

These properties can also be used within the <config> tag to configure
these values globally. Using them within the <host> will overwrite this
global configuration

2 years ago[DVFS] Add/change debug statements for dvfs governors
Christian Heinrich [Wed, 7 Feb 2018 13:07:01 +0000 (14:07 +0100)]
[DVFS] Add/change debug statements for dvfs governors

2 years ago[DVFS] Use local variable for pstate computation
Christian Heinrich [Wed, 7 Feb 2018 13:07:37 +0000 (14:07 +0100)]
[DVFS] Use local variable for pstate computation

2 years ago[DVFS] Fix load calculation for Dvfs governors
Christian Heinrich [Wed, 7 Feb 2018 12:54:21 +0000 (13:54 +0100)]
[DVFS] Fix load calculation for Dvfs governors

The HostLoad plugin computes the load as <cores used>/<cores total>.
This means that governors sometimes decide to slow down even though
one or several cores were used because too many cores were unused.

2 years ago[ENERGY] The energy now depends on the HostLoad plugin.
Christian Heinrich [Tue, 6 Feb 2018 15:50:52 +0000 (16:50 +0100)]
[ENERGY] The energy now depends on the HostLoad plugin.

When a pstate is changed, the energy plugin will update a timestamp for that
host even if that host is never used; this means that we cannot rely on this
to determine if a host has been idle or not. The HostLoad plugin allows
us to do that.

This commit also updates several tesh files as some hosts were reported
as active in the past although they have not computed anything. These
hosts were hence idle and should be reported as such; a machine that
only boots or shuts down is in this case also regarded as unused.

2 years ago[HostLoad] Load is currently 0 because of integer division. Fix that.
Christian Heinrich [Wed, 7 Feb 2018 13:22:20 +0000 (14:22 +0100)]
[HostLoad] Load is currently 0 because of integer division. Fix that.

2 years ago[HostLoad] Ignore VM's ...
Christian Heinrich [Tue, 13 Feb 2018 18:50:11 +0000 (19:50 +0100)]
[HostLoad] Ignore VM's ...

2 years ago[SURF] Move Action::suspended_ to new enum class SuspendedStates
Christian Heinrich [Tue, 13 Feb 2018 16:41:52 +0000 (17:41 +0100)]
[SURF] Move Action::suspended_ to new enum class SuspendedStates

2 years agojenkins: install everything after testing
Martin Quinson [Mon, 12 Feb 2018 16:44:26 +0000 (17:44 +0100)]
jenkins: install everything after testing

2 years agocosmetics
Martin Quinson [Thu, 8 Feb 2018 22:04:15 +0000 (23:04 +0100)]
cosmetics

2 years agorename two files in examples
degomme [Tue, 13 Feb 2018 14:24:34 +0000 (15:24 +0100)]
rename two files in examples
Other files have the same name elsewhere, and this confuses coverage tool in sonar

2 years agoFix MC builds.
Arnaud Giersch [Tue, 13 Feb 2018 10:28:00 +0000 (11:28 +0100)]
Fix MC builds.

2 years agoKill unused function simgrid::xbt::three_way_partition().
Arnaud Giersch [Tue, 13 Feb 2018 09:51:10 +0000 (10:51 +0100)]
Kill unused function simgrid::xbt::three_way_partition().

2 years agoKill unused private function mmalloc_get_increment().
Arnaud Giersch [Tue, 13 Feb 2018 09:45:33 +0000 (10:45 +0100)]
Kill unused private function mmalloc_get_increment().

2 years agoKill unused private function MC_dwarf_at_linkage_name().
Arnaud Giersch [Tue, 13 Feb 2018 09:38:46 +0000 (10:38 +0100)]
Kill unused private function MC_dwarf_at_linkage_name().

2 years agoKill unused private function MC_compare_frame_index_items().
Arnaud Giersch [Tue, 13 Feb 2018 09:34:53 +0000 (10:34 +0100)]
Kill unused private function MC_compare_frame_index_items().

2 years agoKill unused function surf_parse_warn().
Arnaud Giersch [Mon, 12 Feb 2018 23:10:21 +0000 (00:10 +0100)]
Kill unused function surf_parse_warn().

2 years agoKill useless include files.
Arnaud Giersch [Mon, 12 Feb 2018 22:49:29 +0000 (23:49 +0100)]
Kill useless include files.

2 years agoKill unused function instr_platform_traced().
Arnaud Giersch [Mon, 12 Feb 2018 22:39:46 +0000 (23:39 +0100)]
Kill unused function instr_platform_traced().

2 years agoKill unused function get_java_VM().
Arnaud Giersch [Mon, 12 Feb 2018 22:36:06 +0000 (23:36 +0100)]
Kill unused function get_java_VM().

2 years agoKill unused function TRACE_surf_action().
Arnaud Giersch [Mon, 12 Feb 2018 22:27:04 +0000 (23:27 +0100)]
Kill unused function TRACE_surf_action().

2 years agoKill unused private variable surf_action_state_names[].
Arnaud Giersch [Mon, 12 Feb 2018 22:01:33 +0000 (23:01 +0100)]
Kill unused private variable surf_action_state_names[].

2 years agoFunction smpi_process_papi_counters() was renamed (untested).
Arnaud Giersch [Mon, 12 Feb 2018 21:55:23 +0000 (22:55 +0100)]
Function smpi_process_papi_counters() was renamed (untested).

2 years agoKill unused private functions instr_{pause,resume}_tracing().
Arnaud Giersch [Mon, 12 Feb 2018 21:44:59 +0000 (22:44 +0100)]
Kill unused private functions instr_{pause,resume}_tracing().

2 years agoFIXME: TRACE_smpi_sleeping_init() is never called.
Arnaud Giersch [Mon, 12 Feb 2018 21:39:49 +0000 (22:39 +0100)]
FIXME: TRACE_smpi_sleeping_init() is never called.

2 years agoRemove unused run-time parameter "tracing/onelink-only".
Arnaud Giersch [Mon, 12 Feb 2018 21:33:23 +0000 (22:33 +0100)]
Remove unused run-time parameter "tracing/onelink-only".

2 years agoKill unused private function SIMIX_process_get_by_name().
Arnaud Giersch [Mon, 12 Feb 2018 21:18:05 +0000 (22:18 +0100)]
Kill unused private function SIMIX_process_get_by_name().

2 years agoKill unused private function SIMIX_process_exception_terminate().
Arnaud Giersch [Mon, 12 Feb 2018 21:14:35 +0000 (22:14 +0100)]
Kill unused private function SIMIX_process_exception_terminate().

2 years agoKill function declarations without definitions.
Arnaud Giersch [Mon, 12 Feb 2018 21:12:23 +0000 (22:12 +0100)]
Kill function declarations without definitions.

2 years agoKill unused private function MC_snapshot_memcmp().
Arnaud Giersch [Mon, 12 Feb 2018 21:08:11 +0000 (22:08 +0100)]
Kill unused private function MC_snapshot_memcmp().

2 years agoHostAction was killed a long time ago.
Arnaud Giersch [Mon, 12 Feb 2018 21:03:20 +0000 (22:03 +0100)]
HostAction was killed a long time ago.

2 years agomore C++ around ns3
Martin Quinson [Thu, 8 Feb 2018 21:55:46 +0000 (22:55 +0100)]
more C++ around ns3

2 years agocallbacks are actually meant for external users to use
Martin Quinson [Wed, 7 Feb 2018 16:24:29 +0000 (17:24 +0100)]
callbacks are actually meant for external users to use

2 years agoMerge branch 'master' of scm.gforge.inria.fr:/gitroot/simgrid/simgrid
Martin Quinson [Wed, 7 Feb 2018 10:24:51 +0000 (11:24 +0100)]
Merge branch 'master' of scm.gforge.inria.fr:/gitroot/simgrid/simgrid

2 years agoAdd virtual destructor.
Arnaud Giersch [Wed, 7 Feb 2018 10:12:27 +0000 (11:12 +0100)]
Add virtual destructor.

2 years agoRemove semicolon (No, Sonar, it's not commented code).
Arnaud Giersch [Wed, 7 Feb 2018 10:09:41 +0000 (11:09 +0100)]
Remove semicolon (No, Sonar, it's not commented code).