Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
simgrid.git
6 years agoMerge branch 'mc-fastsnapshot' into mc
Gabriel Corona [Fri, 27 Jun 2014 08:20:15 +0000 (10:20 +0200)]
Merge branch 'mc-fastsnapshot' into mc

Conflicts:
src/mc/mc_visited.c

6 years agomodel-checker : minor fix in comments
Marion Guthmuller [Thu, 26 Jun 2014 15:50:45 +0000 (17:50 +0200)]
model-checker : minor fix in comments

6 years agomodel-checker : update tesh
Marion Guthmuller [Thu, 26 Jun 2014 15:49:52 +0000 (17:49 +0200)]
model-checker : update tesh

6 years agomodel-checker : visited states reduction available with comm determinism verification
Marion Guthmuller [Thu, 26 Jun 2014 15:49:25 +0000 (17:49 +0200)]
model-checker : visited states reduction available with comm determinism verification

6 years ago[mc] Inline mc_snapshot_read_region()
Gabriel Corona [Thu, 26 Jun 2014 12:35:40 +0000 (14:35 +0200)]
[mc] Inline mc_snapshot_read_region()

6 years ago[mc] Inline mc_translate_address() and mc_translate_address_region()
Gabriel Corona [Thu, 26 Jun 2014 12:10:38 +0000 (14:10 +0200)]
[mc] Inline mc_translate_address() and mc_translate_address_region()

6 years ago[mc] Forgot to decrease the page refcounts when freeing a snapshot
Gabriel Corona [Thu, 26 Jun 2014 10:12:16 +0000 (12:12 +0200)]
[mc] Forgot to decrease the page refcounts when freeing a snapshot

6 years ago[mc] Add support of privatized global variables in per-page snapshot
Gabriel Corona [Tue, 24 Jun 2014 12:51:10 +0000 (14:51 +0200)]
[mc] Add support of privatized global variables in per-page snapshot

Not very useful because state comparison does not work with SMPI
privatisation yet.

6 years ago[mc] Avoid loosing meaningful bits ot pair.p2 when hashing pointer pair
Gabriel Corona [Tue, 24 Jun 2014 11:29:28 +0000 (13:29 +0200)]
[mc] Avoid loosing meaningful bits ot pair.p2 when hashing pointer pair

6 years ago[mc] Use an unordered_set for compared_pointers instead of a dynarr
Gabriel Corona [Tue, 24 Jun 2014 08:34:51 +0000 (10:34 +0200)]
[mc] Use an unordered_set for compared_pointers instead of a dynarr

It has a better algorithmic complexity.

At the same time, avoid using TLS which is not implemented with
destructor-enabled data structures before C++11.

6 years ago[mc] Remove declaration of mc_read_pagemap() in mc_page_store.cpp
Gabriel Corona [Tue, 24 Jun 2014 07:23:20 +0000 (09:23 +0200)]
[mc] Remove declaration of mc_read_pagemap() in mc_page_store.cpp

It is now in mc_page_snapshot.cpp.

6 years ago[mc] Optimise more files
Gabriel Corona [Tue, 24 Jun 2014 07:13:41 +0000 (09:13 +0200)]
[mc] Optimise more files

6 years ago[mc] Always inline mc_page_store_get_page (C version of page_store->get_page())
Gabriel Corona [Mon, 23 Jun 2014 10:02:49 +0000 (12:02 +0200)]
[mc] Always inline mc_page_store_get_page (C version of page_store->get_page())

6 years agomodel-checker : clarify comments
Marion Guthmuller [Wed, 4 Jun 2014 15:41:09 +0000 (17:41 +0200)]
model-checker : clarify comments

6 years ago[mc] Move method definition out of class declaratio and force inline
Gabriel Corona [Mon, 23 Jun 2014 08:30:57 +0000 (10:30 +0200)]
[mc] Move method definition out of class declaratio and force inline

6 years ago[mc] Reset the softdirty bits *before* restoring the ignored bytes (not after)
Gabriel Corona [Fri, 20 Jun 2014 14:09:12 +0000 (16:09 +0200)]
[mc] Reset the softdirty bits *before* restoring the ignored bytes (not after)

We want to know what has changed since the last per-page snapshot: we
have to reset the soft dirty bits just after the per-page restoration.

6 years ago[mc] Try to use optimisation with some part of the MC
Gabriel Corona [Fri, 20 Jun 2014 13:31:04 +0000 (15:31 +0200)]
[mc] Try to use optimisation with some part of the MC

6 years ago[mc] Always inline 'inline' functions
Gabriel Corona [Fri, 20 Jun 2014 12:02:05 +0000 (14:02 +0200)]
[mc] Always inline 'inline' functions

The MC is usually compiled without optimisation as they tend to
confuse the state comparison. But we *really* want to inline functions
declared 'inline'.

6 years ago[mc] Fix compilation warnings/errors when optimizing
Gabriel Corona [Fri, 20 Jun 2014 08:33:27 +0000 (10:33 +0200)]
[mc] Fix compilation warnings/errors when optimizing

6 years ago[mc] Documentation of mc_page_snapshot
Gabriel Corona [Thu, 19 Jun 2014 14:07:55 +0000 (16:07 +0200)]
[mc] Documentation of mc_page_snapshot

6 years ago[mc] Config to disable soft-dirty page tracking --cfg=model-check/soft-dirty:yes
Gabriel Corona [Thu, 19 Jun 2014 13:49:21 +0000 (15:49 +0200)]
[mc] Config to disable soft-dirty page tracking --cfg=model-check/soft-dirty:yes

It is here mostly to test the effect on soft-dirty page tracking on
the performance of the simulator. It might be removed in the future
once we will be certain that soft-dirty page tracking does not have a
significant negative impact on some workloads.

6 years ago[mc] Avoid big alloca in mc_snapshot_region_memcp and mc_snapshot_memcp
Gabriel Corona [Thu, 19 Jun 2014 13:33:12 +0000 (15:33 +0200)]
[mc] Avoid big alloca in mc_snapshot_region_memcp and mc_snapshot_memcp

Be more stack friendly.

6 years ago[mc] Poor man's TCO in compare_heap_area_with_type()
Gabriel Corona [Thu, 19 Jun 2014 13:17:58 +0000 (15:17 +0200)]
[mc] Poor man's TCO in compare_heap_area_with_type()

This is slightly more friendly for the stack.

6 years ago[mc] Do not allocate pagemap buffer on the heap
Gabriel Corona [Thu, 19 Jun 2014 13:13:42 +0000 (15:13 +0200)]
[mc] Do not allocate pagemap buffer on the heap

This won't work very well with small stacks.

6 years ago[mc] pread_whole must restart in cas of EINTR, not EAGAIN
Gabriel Corona [Thu, 19 Jun 2014 12:47:41 +0000 (14:47 +0200)]
[mc] pread_whole must restart in cas of EINTR, not EAGAIN

This probably won't happen with this file anyway.

6 years ago[mc] Documentation about per-page snapshots
Gabriel Corona [Thu, 19 Jun 2014 12:46:16 +0000 (14:46 +0200)]
[mc] Documentation about per-page snapshots

6 years ago[mc] Add some documentation
Gabriel Corona [Thu, 19 Jun 2014 12:06:15 +0000 (14:06 +0200)]
[mc] Add some documentation

6 years ago[mc] Avoid region lookup when we know we are in the heap
Gabriel Corona [Thu, 19 Jun 2014 11:09:09 +0000 (13:09 +0200)]
[mc] Avoid region lookup when we know we are in the heap

6 years ago[mc] Fix bug mc_snapshot_read_fragmented
Gabriel Corona [Thu, 19 Jun 2014 10:43:22 +0000 (12:43 +0200)]
[mc] Fix bug mc_snapshot_read_fragmented

Return the correct address.

6 years ago[mc] Replace test-and-die with assert
Gabriel Corona [Thu, 19 Jun 2014 10:27:31 +0000 (12:27 +0200)]
[mc] Replace test-and-die with assert

6 years ago[mc] Avoid looking up region in mc_diff (we are in the heap)
Gabriel Corona [Thu, 19 Jun 2014 10:24:09 +0000 (12:24 +0200)]
[mc] Avoid looking up region in mc_diff (we are in the heap)

6 years ago[mc] Fix mc_snapshot_read_fragmented
Gabriel Corona [Thu, 19 Jun 2014 10:03:34 +0000 (12:03 +0200)]
[mc] Fix mc_snapshot_read_fragmented

6 years ago[mc] Remove heap{base,info}{1,2} field in struct s_mc_diff (not meaningful in per...
Gabriel Corona [Thu, 19 Jun 2014 09:51:00 +0000 (11:51 +0200)]
[mc] Remove heap{base,info}{1,2} field in struct s_mc_diff (not meaningful in per-page snapashots)

6 years ago[mc] Fix inverted test on page soft-dirtiness
Gabriel Corona [Thu, 19 Jun 2014 07:53:24 +0000 (09:53 +0200)]
[mc] Fix inverted test on page soft-dirtiness

6 years ago[mc] Do not use offsetof() in mc_snapshot_get_heap_end
Gabriel Corona [Tue, 17 Jun 2014 14:44:42 +0000 (16:44 +0200)]
[mc] Do not use offsetof() in mc_snapshot_get_heap_end

We don't need this. It's much clearer like this.

6 years ago[mc] Fix mc_snapshot_get_heap_end() for per-page snapshots
Gabriel Corona [Tue, 17 Jun 2014 14:40:25 +0000 (16:40 +0200)]
[mc] Fix mc_snapshot_get_heap_end() for per-page snapshots

6 years ago[mc] Fix mc_translate_address_region() for per-page snapshots
Gabriel Corona [Tue, 17 Jun 2014 14:19:28 +0000 (16:19 +0200)]
[mc] Fix mc_translate_address_region() for per-page snapshots

It was completely broken :/

6 years ago[mc] Remove mc_untranslate_address() and mc_member_snapshot_resolve()
Gabriel Corona [Tue, 17 Jun 2014 13:52:32 +0000 (15:52 +0200)]
[mc] Remove mc_untranslate_address() and mc_member_snapshot_resolve()

Those were working in the snapshot address space so we do not use them
anymore (it is not very useful to work in the snapshot space when the
snapshot space is broken in pages).

We work in the process address space instead (mc_member_resolve).

6 years ago[mc] Use mc_snapshot_read in snapshot_compare (compatibility with per-page snapshots)
Gabriel Corona [Tue, 17 Jun 2014 13:45:39 +0000 (15:45 +0200)]
[mc] Use mc_snapshot_read in snapshot_compare (compatibility with per-page snapshots)

6 years ago[mc] mremap does not like MAP_PRIVATE|MAP_ANONYMOUS regions
Gabriel Corona [Tue, 17 Jun 2014 13:29:24 +0000 (15:29 +0200)]
[mc] mremap does not like MAP_PRIVATE|MAP_ANONYMOUS regions

Use a MAP_PRIVATE one instead.

6 years ago[mc] Add option --cfg=model-check/sparse-checkpoint:yes to enable per page snapshot
Gabriel Corona [Tue, 17 Jun 2014 12:42:38 +0000 (14:42 +0200)]
[mc] Add option --cfg=model-check/sparse-checkpoint:yes to enable per page snapshot

6 years ago[mc] Fix bugs in mc_page_snapshot
Gabriel Corona [Tue, 17 Jun 2014 12:21:50 +0000 (14:21 +0200)]
[mc] Fix bugs in mc_page_snapshot

6 years ago[mc] Use mc_snapshot_read in mc_diff (compatibility with per-page snapshots)
Gabriel Corona [Tue, 17 Jun 2014 12:06:04 +0000 (14:06 +0200)]
[mc] Use mc_snapshot_read in mc_diff (compatibility with per-page snapshots)

6 years ago[mc] Use mc_snapshot_read in dwarf expression evaluation (compatibility with per...
Gabriel Corona [Tue, 17 Jun 2014 10:56:32 +0000 (12:56 +0200)]
[mc] Use mc_snapshot_read in dwarf expression evaluation (compatibility with per-page snapshots)

6 years ago[mc] Fix bug in mc_snapshot_read
Gabriel Corona [Tue, 17 Jun 2014 10:54:29 +0000 (12:54 +0200)]
[mc] Fix bug in mc_snapshot_read

It was broken when no snapshot was used.

6 years ago[mc] Remove useless bits
Gabriel Corona [Tue, 17 Jun 2014 10:12:57 +0000 (12:12 +0200)]
[mc] Remove useless bits

6 years ago[mc] Remove useless parameters in compare_local_variables
Gabriel Corona [Mon, 16 Jun 2014 14:10:26 +0000 (16:10 +0200)]
[mc] Remove useless parameters in compare_local_variables

6 years ago[mc] Group MC_ignore_global_variable("mc_diff_info"); its fiends
Gabriel Corona [Mon, 16 Jun 2014 13:59:34 +0000 (15:59 +0200)]
[mc] Group MC_ignore_global_variable("mc_diff_info"); its fiends

6 years ago[mc] Remove useless parts in mmalloc_compare_heap, MC_take_snapshot_stacks, snapshot_...
Gabriel Corona [Mon, 16 Jun 2014 13:29:26 +0000 (15:29 +0200)]
[mc] Remove useless parts in mmalloc_compare_heap, MC_take_snapshot_stacks, snapshot_compare

6 years ago[mc] Use process addresses in mc_compare
Gabriel Corona [Mon, 16 Jun 2014 12:50:42 +0000 (14:50 +0200)]
[mc] Use process addresses in mc_compare

This is necessary in order to work work with per-page snapshots.

6 years ago[mc] Partial integration of per-page snapshot address translation (wip)
Gabriel Corona [Fri, 13 Jun 2014 14:03:58 +0000 (16:03 +0200)]
[mc] Partial integration of per-page snapshot address translation (wip)

6 years ago[mc] Simplify s_mc_snapshot_stack
Gabriel Corona [Mon, 16 Jun 2014 11:00:15 +0000 (13:00 +0200)]
[mc] Simplify s_mc_snapshot_stack

Some fields were not used and have been removed:

  * stack_pointer (SP in the snapshot)
  * real_address  (address of the stack)

The first one does not make sense with page-fragmented snapshot.

Simplify the computation of snapshot->stack_sizes[cursor].  The old
computation did not make sense with page fragmented snapshots.

6 years ago[mc] Update doc for page_store
Gabriel Corona [Fri, 13 Jun 2014 09:17:52 +0000 (11:17 +0200)]
[mc] Update doc for page_store

6 years ago[mc] Page-level sparse snapshot: work-in-progress, working page_store
Gabriel Corona [Tue, 27 May 2014 10:27:47 +0000 (12:27 +0200)]
[mc] Page-level sparse snapshot: work-in-progress, working page_store

Implement page_store which stores immutables/shared/refcounted copies
of memory pages.

6 years ago[mc] In MC_ignore, keep the zeroed data out of the main snapshot
Gabriel Corona [Fri, 13 Jun 2014 12:07:46 +0000 (14:07 +0200)]
[mc] In MC_ignore, keep the zeroed data out of the main snapshot

The previous implementation was zeroing out the snapshot data

   * so that it will be automatically ignored by the state comparator;

   * but not for the first snapshot in order to be able to backtrack
     to the initial state;

In preparation for the per-page snapshoting code, we

  1. zero out on the main memory;
  2. keep the zero-ed bytes out of the main snapshot regions;
  3. restore the zero-ed bytes.

This way the state comparison code and the per-page snapshoting code
do not have to worry about this. Moreover by normalizing, the
"ignored" bytes, we increase the possibility of sharing memory pages
in per-page snapshots.

6 years agoRemove comment which has not been accurate for a long long time
Gabriel Corona [Thu, 5 Jun 2014 17:24:38 +0000 (19:24 +0200)]
Remove comment which has not been accurate for a long long time

6 years agomodel-checker : use new variable _sg_mc_liveness instead of _sg_mc_property_file
Marion Guthmuller [Wed, 4 Jun 2014 15:15:21 +0000 (17:15 +0200)]
model-checker : use new variable _sg_mc_liveness instead of _sg_mc_property_file

6 years agomodel-checker : remove useless debug message and add another one
Marion Guthmuller [Wed, 4 Jun 2014 15:13:23 +0000 (17:13 +0200)]
model-checker : remove useless debug message and add another one

6 years agomodel-checker : compare the pid of enabled processes before memory introspection
Marion Guthmuller [Wed, 4 Jun 2014 15:08:47 +0000 (17:08 +0200)]
model-checker : compare the pid of enabled processes before memory introspection

6 years agomodel-checker : fix backtracking with comm determinism verification
Marion Guthmuller [Wed, 4 Jun 2014 08:35:10 +0000 (10:35 +0200)]
model-checker : fix backtracking with comm determinism verification

6 years agomodel-checker : comment erroneous ignore (not completely sure ...)
Marion Guthmuller [Tue, 3 Jun 2014 17:00:53 +0000 (19:00 +0200)]
model-checker : comment erroneous ignore (not completely sure ...)

6 years agomodel-checker : use the right heap
Marion Guthmuller [Tue, 3 Jun 2014 16:14:09 +0000 (18:14 +0200)]
model-checker : use the right heap

6 years agomodel-checker : reword debug message
Marion Guthmuller [Tue, 3 Jun 2014 16:13:18 +0000 (18:13 +0200)]
model-checker : reword debug message

6 years agomodel-checker : mc_dpor.c -> mc_safety.c
Marion Guthmuller [Tue, 3 Jun 2014 16:10:33 +0000 (18:10 +0200)]
model-checker : mc_dpor.c -> mc_safety.c

6 years agomodel-checker : remove useless ignore
Marion Guthmuller [Tue, 3 Jun 2014 15:45:43 +0000 (17:45 +0200)]
model-checker : remove useless ignore

6 years agomodel-checker : new tesh examples about communications determinism verification
Marion Guthmuller [Tue, 3 Jun 2014 08:42:48 +0000 (10:42 +0200)]
model-checker : new tesh examples about communications determinism verification

6 years agomodel-checker : fix comm determinism detection mechanisms
Marion Guthmuller [Fri, 30 May 2014 21:51:41 +0000 (23:51 +0200)]
model-checker : fix comm determinism detection mechanisms

6 years agomodel-checker : forget file
Marion Guthmuller [Fri, 30 May 2014 21:30:34 +0000 (23:30 +0200)]
model-checker : forget file

6 years agomodel-checker : cleanups, refactoring and apply indent script
Marion Guthmuller [Fri, 30 May 2014 21:28:56 +0000 (23:28 +0200)]
model-checker : cleanups, refactoring and apply indent script

6 years agomodel-checker : cosmetics in log message
Marion Guthmuller [Fri, 30 May 2014 10:04:10 +0000 (12:04 +0200)]
model-checker : cosmetics in log message

6 years agomodel-checker : improve error message
Marion Guthmuller [Fri, 30 May 2014 07:37:44 +0000 (09:37 +0200)]
model-checker : improve error message

6 years ago[mc] Temporary fix for smpi_process_finalize leading to graph explosion in MC
Gabriel Corona [Mon, 26 May 2014 10:12:39 +0000 (12:12 +0200)]
[mc] Temporary fix for smpi_process_finalize leading to graph explosion in MC

6 years agoMerge branch 'master' into mc
Gabriel Corona [Mon, 26 May 2014 10:05:12 +0000 (12:05 +0200)]
Merge branch 'master' into mc

6 years agoFix a compilation error regarding logging and strings in fat trees
Stéphane Castelli [Mon, 26 May 2014 09:42:17 +0000 (11:42 +0200)]
Fix a compilation error regarding logging and strings in fat trees

6 years agoLots of bugfixes for the fat trees, it should at least not crash when using it
Stéphane Castelli [Mon, 26 May 2014 08:55:34 +0000 (10:55 +0200)]
Lots of bugfixes for the fat trees, it should at least not crash when using it

6 years agosmall cosmetics to AsClusterFatTree::generateDotFile()
Stéphane Castelli [Thu, 22 May 2014 14:53:21 +0000 (16:53 +0200)]
small cosmetics to AsClusterFatTree::generateDotFile()

6 years agoFix some bugs in fat trees
Stéphane Castelli [Thu, 22 May 2014 12:36:10 +0000 (14:36 +0200)]
Fix some bugs in fat trees

6 years agomake the xbt_os_time module public
Martin Quinson [Sat, 24 May 2014 20:38:15 +0000 (22:38 +0200)]
make the xbt_os_time module public

6 years agoupdate the comments of that file
Martin Quinson [Sat, 24 May 2014 20:13:27 +0000 (22:13 +0200)]
update the comments of that file

6 years agolisting new files
suter [Fri, 23 May 2014 18:34:01 +0000 (20:34 +0200)]
listing new files

6 years agostart testing remote I/Os
suter [Fri, 23 May 2014 18:27:50 +0000 (20:27 +0200)]
start testing remote I/Os

6 years agoleak--
suter [Fri, 23 May 2014 18:03:57 +0000 (20:03 +0200)]
leak--

6 years agoallow several hosts to open the same file simultaneously
suter [Fri, 23 May 2014 17:47:49 +0000 (19:47 +0200)]
allow several hosts to open the same file simultaneously

6 years agoThrow an exception only when it's really not implemented
suter [Fri, 23 May 2014 10:44:54 +0000 (12:44 +0200)]
Throw an exception only when it's really not implemented

6 years agoMove unachieved release goals from ChangeLog to TODO file.
Arnaud Giersch [Fri, 23 May 2014 09:46:07 +0000 (11:46 +0200)]
Move unachieved release goals from ChangeLog to TODO file.

6 years agoCosmetics: keep alphabetical order.
Arnaud Giersch [Thu, 22 May 2014 09:40:23 +0000 (11:40 +0200)]
Cosmetics: keep alphabetical order.

6 years agoUpdate doc for surf++
Paul Bédaride [Thu, 22 May 2014 15:23:43 +0000 (17:23 +0200)]
Update doc for surf++

6 years agoRevert "[mmalloc] Use mremap to expand heaps (heap collision prevention)"
Gabriel Corona [Thu, 22 May 2014 12:09:16 +0000 (14:09 +0200)]
Revert "[mmalloc] Use mremap to expand heaps (heap collision prevention)"

This is really how is should be handled. However, this does not work
if someone has split the VMA in parts: this is done when creating
stacks on the heap without MC, mprotect() is used to create a guard
page for the stack.

This reverts commit ba3185d8a4f0a56804d3b1ff24e596096f06a37c.

6 years agoDocumentation for stack size, stack guard and context factory
Gabriel Corona [Thu, 22 May 2014 11:45:55 +0000 (13:45 +0200)]
Documentation for stack size, stack guard and context factory

6 years agoAdd some words about %e fore spaces in logs.
Arnaud Giersch [Wed, 21 May 2014 13:22:16 +0000 (15:22 +0200)]
Add some words about %e fore spaces in logs.

6 years agoWhen the parameter parser is jammed, display the full parsed string
Martin Quinson [Wed, 21 May 2014 08:32:08 +0000 (10:32 +0200)]
When the parameter parser is jammed, display the full parsed string

6 years agoadd some doc about the trap I just felt into
Martin Quinson [Wed, 21 May 2014 08:30:58 +0000 (10:30 +0200)]
add some doc about the trap I just felt into

6 years agoFree previously set process data.
Arnaud Giersch [Tue, 20 May 2014 16:00:35 +0000 (18:00 +0200)]
Free previously set process data.

6 years agoFree smpi_instances.
Arnaud Giersch [Tue, 20 May 2014 15:26:27 +0000 (17:26 +0200)]
Free smpi_instances.

6 years agoFree powerPeak which is unused here.
Arnaud Giersch [Tue, 20 May 2014 15:03:22 +0000 (17:03 +0200)]
Free powerPeak which is unused here.

6 years agoSome tests have different outputs when !HAVE_TRACING. Fix them.
Arnaud Giersch [Tue, 20 May 2014 14:02:10 +0000 (16:02 +0200)]
Some tests have different outputs when !HAVE_TRACING.  Fix them.

6 years agoThis field definitely has sense only when tracing is compiled in.
Arnaud Giersch [Tue, 20 May 2014 13:14:29 +0000 (15:14 +0200)]
This field definitely has sense only when tracing is compiled in.

6 years agoFix race condition.
Arnaud Giersch [Tue, 20 May 2014 13:02:22 +0000 (15:02 +0200)]
Fix race condition.

Avoid to launch and cancel the task at the same time.  It seems to work with
HAVE_TRACING, but fails without.  In fact, the task cancelation happens before
the task starts to execute.  As a workaround, add a small delay before firing
up the cancel.

6 years agoSkip simcall when HAVE_TRACING.
Arnaud Giersch [Tue, 20 May 2014 08:07:14 +0000 (10:07 +0200)]
Skip simcall when HAVE_TRACING.

And try to keep the same visible behavior with and without tracing.

6 years agoCosmetics: reuse already defined variable.
Arnaud Giersch [Tue, 20 May 2014 08:05:14 +0000 (10:05 +0200)]
Cosmetics: reuse already defined variable.