location manager: fix race condition for default configuration

The LocationManager takes a default configuration (a star-topology)
that is defined cells/lmd.fragment via a defined setup.  Such
configuration is run when the cell starts.  The LocationManager cell
currently defers starting until the end of the constructor, when all
necessary objects have been created.

One object that may be created in the LocationManager constructor is
the Server object.  This is a Runnable that runs within a separate
thread.  It accepts requests (as UDP packets) and uses the
configuration to build a response.  The Server object's thread is
created and started from within the Server constructor.  This means
that the Server thread is started before the LocationManager cell has
started.

It also means there is no happened-before relationship between the
Server thread accepting a new UDP packet and the thread creating the
LocationManager cell starting the cell, so processing the defined setup
to configure the cell.

On a multi-core machine, if the two threads run on separate cores, the
visibility of the updated configuration may be delayed and if, in this
time, a remote domain connects, Server will process the request without
seeing the updated configuration.  This results in the following
stack-trace:

dmg.util.CommandThrowableException: (3) java.lang.IllegalArgumentException: Domain not defined : anotherDomain from ac_whatToDo_$_1
        at dmg.util.command.AcCommandExecutor.execute(AcCommandExecutor.java:184) ~[cells-2.6.0-SNAPSHOT.jar:2.6.0-SNAPSHOT]
        at dmg.util.CommandInterpreter$CommandEntry.execute(CommandInterpreter.java:376) ~[cells-2.6.0-SNAPSHOT.jar:2.6.0-SNAPSHOT]
        at dmg.util.CommandInterpreter.execute(CommandInterpreter.java:272) ~[cells-2.6.0-SNAPSHOT.jar:2.6.0-SNAPSHOT]
        at dmg.util.CommandInterpreter.command(CommandInterpreter.java:206) ~[cells-2.6.0-SNAPSHOT.jar:2.6.0-SNAPSHOT]
        at dmg.cells.services.LocationManager$Server.process(LocationManager.java:391) ~[cells-2.6.0-SNAPSHOT.jar:2.6.0-SNAPSHOT]
        at dmg.cells.services.LocationManager$Server.run(LocationManager.java:372) ~[cells-2.6.0-SNAPSHOT.jar:2.6.0-SNAPSHOT]
        at dmg.cells.nucleus.CellNucleus$1.run(CellNucleus.java:656) [cells-2.6.0-SNAPSHOT.jar:2.6.0-SNAPSHOT]
        at java.lang.Thread.run(Thread.java:722) [na:1.7.0_03]
Caused by: java.lang.IllegalArgumentException: Domain not defined : anotherDomain
        at dmg.cells.services.LocationManager$Server.ac_whatToDo_$_1(LocationManager.java:666) ~[cells-2.6.0-SNAPSHOT.jar:2.6.0-SNAPSH
OT]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.7.0_03]
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[na:1.7.0_03]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_03]
        at java.lang.reflect.Method.invoke(Method.java:601) ~[na:1.7.0_03]
        at dmg.util.command.AcCommandExecutor.execute(AcCommandExecutor.java:157) ~[cells-2.6.0-SNAPSHOT.jar:2.6.0-SNAPSHOT]
        ... 7 common frames omitted

This patch fixes the issue by starting the Server thread after it has
been configured.  This provides the happens-before relationship, so
providing correct behaviour.

Target: trunk
Request: 2.5
Request: 2.4
Request: 2.2
Require-notes: yes
Require-book: no
Patch: http://rb.dcache.org/r/5114/
Acked-by: Gerd Behrmann