OK, also done.

On Wed, Jan 27, 2016 at 2:07 PM, Remko Popma <[email protected]> wrote:

> Perhaps you also want to add this to the LogManager.shutdown() methods,
> since I imagine that's what people will actually use/look at.
>
> Sent from my iPhone
>
> On 2016/01/27, at 18:20, Mikael Ståldal <[email protected]> wrote:
>
> OK, done.
>
> On Wed, Jan 27, 2016 at 6:17 AM, Remko Popma <[email protected]>
> wrote:
>
>> Mikael, feel free to update the javadoc when you have time.
>>
>>
>> On Wednesday, 27 January 2016, Remko Popma <[email protected]> wrote:
>>
>>> Since the async loggers and appenders will wait until their queue has
>>> been cleared by the background thread, it is a blocking call.
>>>
>>> We should probably add a sentence to the java doc to clarify this.
>>>
>>> Sent from my iPhone
>>>
>>> On 2016/01/26, at 18:15, Mikael Ståldal <[email protected]>
>>> wrote:
>>>
>>> I think that we should be clear, in Javadoc, about whether this new
>>> method is synchronous/blocking or not.
>>>
>>> (I could say the same about quite a few existing methods as well, but
>>> let's at least start to be clear about new methods from now.)
>>>
>>> On Tue, Jan 26, 2016 at 1:31 AM, Matt Sicker <[email protected]> wrote:
>>>
>>>> I like it!
>>>>
>>>> On 25 January 2016 at 18:23, Ralph Goers <[email protected]>
>>>> wrote:
>>>>
>>>>> Then the method name would be terminate?  I could live with that.  I
>>>>> also like the fact that when something goes wrong with it then it would be
>>>>> interminable ;-)
>>>>>
>>>>> Ralph
>>>>>
>>>>> On Jan 25, 2016, at 5:18 PM, Matt Sicker <[email protected]> wrote:
>>>>>
>>>>> How about Terminable? It's even a real word to boot.
>>>>>
>>>>> On 25 January 2016 at 18:15, Ralph Goers <[email protected]>
>>>>> wrote:
>>>>>
>>>>>> Yes, well - Serializable actually sounds like it should be a real
>>>>>> word. Shutdownable doesn’t - in fact, my mail editor just split it into 
>>>>>> two
>>>>>> words to “help” me. I take a different view. A class that declares it
>>>>>> implements an interface isn’t “capable” of anything - it just implements
>>>>>> the interface. The interface name is what tells you that the implementing
>>>>>> class is able to do something, which is why you have Comparable instead 
>>>>>> of
>>>>>> just Compare, Cloneable instead of just Clone,  or Closeable instead of
>>>>>> just Close. Would you want Stop instead of Stoppable?  I view “able” as
>>>>>> just a shorthand way of saying “Capable”, but unfortunately that just
>>>>>> doesn’t sound right with Shutdown (at least to me).
>>>>>>
>>>>>> Here are some “able” alternatives - presumably each would have a
>>>>>> corresponding method name instead of shutdown:
>>>>>> Terminateable.
>>>>>> Completeable.
>>>>>> Concludeable.
>>>>>> Haltable.
>>>>>> Dismissable.
>>>>>> Expireable.
>>>>>>
>>>>>> I suppose we could also use Stoppable but that seems odd since stop
>>>>>> is part of Lifecycle.
>>>>>>
>>>>>> Got a preference?
>>>>>>
>>>>>> Ralph
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Jan 25, 2016, at 4:35 PM, Gary Gregory <[email protected]>
>>>>>> wrote:
>>>>>>
>>>>>> I see some interfaces with "*Capable*" in the name here and there in
>>>>>> the FOSS world (but not in the JRE) so I am a little more comfortable 
>>>>>> with
>>>>>> it.
>>>>>>
>>>>>> I still see plain old "Shutdown" as simpler.
>>>>>>
>>>>>> I think I've boiled down my feel for this name to the fact that the
>>>>>> Capable postfix is redundant since a class implementing any interface is
>>>>>> "capable" of that functionality. IOW we have Serializable vs.
>>>>>> SerializationCabable, which means the same thing.
>>>>>>
>>>>>> Gary
>>>>>>
>>>>>> On Mon, Jan 25, 2016 at 7:27 AM, Ralph Goers <
>>>>>> [email protected]> wrote:
>>>>>>
>>>>>>> What does it feel weird to you?  To be honest, I originally named
>>>>>>> the interface ‘Shutdown” and then changed it since it really is about
>>>>>>> implementing a behavior and “Shutdown” alone doesn’t really describe 
>>>>>>> that.
>>>>>>>
>>>>>>> Ralph
>>>>>>>
>>>>>>> On Jan 24, 2016, at 11:09 PM, Gary Gregory <[email protected]>
>>>>>>> wrote:
>>>>>>>
>>>>>>> On Sun, Jan 24, 2016 at 10:07 PM, Gary Gregory <
>>>>>>> [email protected]> wrote:
>>>>>>>
>>>>>>>> On Sun, Jan 24, 2016 at 1:54 PM, Ralph Goers <
>>>>>>>> [email protected]> wrote:
>>>>>>>>
>>>>>>>>> Yes, Shutdownable is too weird.
>>>>>>>>>
>>>>>>>>
>>>>>>>> How about calling it simply "Shutdown" then? FooCapable feels weird
>>>>>>>> to me.
>>>>>>>>
>>>>>>>> Can anyone think of other (one-method or not) optional feature-like
>>>>>>>> interfaces in the JRE or other code base?
>>>>>>>>
>>>>>>>
>>>>>>> hm... ShutdownService?
>>>>>>>
>>>>>>> Gary
>>>>>>>
>>>>>>>
>>>>>>>>
>>>>>>>> Gary
>>>>>>>>
>>>>>>>> Closeable would imply there is a close method, not a shutdown
>>>>>>>>> method.  I have my doubts about the try-with-resources use case here.
>>>>>>>>> Virtually all usages are probably going to be to disable automatic 
>>>>>>>>> shutdown
>>>>>>>>> and then the user placing the shutdown call somewhere they can 
>>>>>>>>> control,
>>>>>>>>> which probably will have nothing to do with initialization of logging.
>>>>>>>>>
>>>>>>>>> Ralph
>>>>>>>>>
>>>>>>>>> On Jan 24, 2016, at 2:43 PM, Gary Gregory <[email protected]>
>>>>>>>>> wrote:
>>>>>>>>>
>>>>>>>>> Resending, got a error from my phone...
>>>>>>>>> ---------- Forwarded message ----------
>>>>>>>>> From: "Gary Gregory" <[email protected]>
>>>>>>>>> Date: Jan 24, 2016 1:41 PM
>>>>>>>>> Subject: Re: logging-log4j2 git commit: LOG4J2-124 - Add shutdown
>>>>>>>>> methods to LogManager
>>>>>>>>> To: <[email protected]>
>>>>>>>>> Cc:
>>>>>>>>>
>>>>>>>>> Hi all,
>>>>>>>>>
>>>>>>>>> Any reason not use the usual -able postfix instead of
>>>>>>>>> ShutdownCapable: Shutdownable sounds too weird? What about reusing 
>>>>>>>>> plain
>>>>>>>>> old Closeable? That means you could use the context in a 
>>>>>>>>> try-with-resources
>>>>>>>>> block, a bonus.
>>>>>>>>>
>>>>>>>>> Gary
>>>>>>>>> On Jan 24, 2016 10:18 AM, <[email protected]> wrote:
>>>>>>>>>
>>>>>>>>>> Repository: logging-log4j2
>>>>>>>>>> Updated Branches:
>>>>>>>>>>   refs/heads/master 7d3aac4b9 -> 2df3f0e72
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> LOG4J2-124 - Add shutdown methods to LogManager
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Project:
>>>>>>>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
>>>>>>>>>> Commit:
>>>>>>>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/2df3f0e7
>>>>>>>>>> Tree:
>>>>>>>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/2df3f0e7
>>>>>>>>>> Diff:
>>>>>>>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/2df3f0e7
>>>>>>>>>>
>>>>>>>>>> Branch: refs/heads/master
>>>>>>>>>> Commit: 2df3f0e7262c90e3fe1700f053eebf18491650d9
>>>>>>>>>> Parents: 7d3aac4
>>>>>>>>>> Author: Ralph Goers <[email protected]>
>>>>>>>>>> Authored: Sun Jan 24 11:18:41 2016 -0700
>>>>>>>>>> Committer: Ralph Goers <[email protected]>
>>>>>>>>>> Committed: Sun Jan 24 11:18:41 2016 -0700
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> ----------------------------------------------------------------------
>>>>>>>>>>  .../org/apache/logging/log4j/LogManager.java    | 62
>>>>>>>>>> ++++++++++++++++++++
>>>>>>>>>>  .../logging/log4j/spi/ShutdownCapable.java      | 17 ++++++
>>>>>>>>>>  .../apache/logging/log4j/LogManagerTest.java    |  7 +++
>>>>>>>>>>  .../logging/log4j/core/LoggerContext.java       |  8 ++-
>>>>>>>>>>  4 files changed, 93 insertions(+), 1 deletion(-)
>>>>>>>>>>
>>>>>>>>>> ----------------------------------------------------------------------
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/2df3f0e7/log4j-api/src/main/java/org/apache/logging/log4j/LogManager.java
>>>>>>>>>>
>>>>>>>>>> ----------------------------------------------------------------------
>>>>>>>>>> diff --git
>>>>>>>>>> a/log4j-api/src/main/java/org/apache/logging/log4j/LogManager.java
>>>>>>>>>> b/log4j-api/src/main/java/org/apache/logging/log4j/LogManager.java
>>>>>>>>>> index f10e5a8..64c6ee5 100644
>>>>>>>>>> ---
>>>>>>>>>> a/log4j-api/src/main/java/org/apache/logging/log4j/LogManager.java
>>>>>>>>>> +++
>>>>>>>>>> b/log4j-api/src/main/java/org/apache/logging/log4j/LogManager.java
>>>>>>>>>> @@ -27,6 +27,7 @@ import
>>>>>>>>>> org.apache.logging.log4j.simple.SimpleLoggerContextFactory;
>>>>>>>>>>  import org.apache.logging.log4j.spi.LoggerContext;
>>>>>>>>>>  import org.apache.logging.log4j.spi.LoggerContextFactory;
>>>>>>>>>>  import org.apache.logging.log4j.spi.Provider;
>>>>>>>>>> +import org.apache.logging.log4j.spi.ShutdownCapable;
>>>>>>>>>>  import org.apache.logging.log4j.status.StatusLogger;
>>>>>>>>>>  import org.apache.logging.log4j.util.LoaderUtil;
>>>>>>>>>>  import org.apache.logging.log4j.util.PropertiesUtil;
>>>>>>>>>> @@ -285,6 +286,67 @@ public class LogManager {
>>>>>>>>>>      }
>>>>>>>>>>
>>>>>>>>>>      /**
>>>>>>>>>> +     * Shutdown using the default LoggerContext.
>>>>>>>>>> +     * @since 2.6
>>>>>>>>>> +     */
>>>>>>>>>> +    public static void shutdown() {
>>>>>>>>>> +        shutdown(getContext());
>>>>>>>>>> +    }
>>>>>>>>>> +
>>>>>>>>>> +    /**
>>>>>>>>>> +     * Shutdown the logging system if the logging system
>>>>>>>>>> supports it.
>>>>>>>>>> +     * @param currentContext if true the LoggerContext for the
>>>>>>>>>> caller of this method will be used.
>>>>>>>>>> +     * @since 2.6
>>>>>>>>>> +     */
>>>>>>>>>> +    public static void shutdown(boolean currentContext) {
>>>>>>>>>> +        shutdown(getContext(currentContext));
>>>>>>>>>> +    }
>>>>>>>>>> +
>>>>>>>>>> +    /**
>>>>>>>>>> +     * Shutdown the logging system if the logging system
>>>>>>>>>> supports it.
>>>>>>>>>> +     * @param loader The ClassLoader for the context. If null
>>>>>>>>>> the context will attempt to determine the appropriate
>>>>>>>>>> +     *            ClassLoader.
>>>>>>>>>> +     * @param currentContext if false the LoggerContext
>>>>>>>>>> appropriate for the caller of this method will be used.
>>>>>>>>>> +     * @since 2.6
>>>>>>>>>> +     */
>>>>>>>>>> +    public static void shutdown(final ClassLoader loader, final
>>>>>>>>>> boolean currentContext) {
>>>>>>>>>> +        shutdown(getContext(loader, currentContext));
>>>>>>>>>> +    }
>>>>>>>>>> +
>>>>>>>>>> +    /**
>>>>>>>>>> +     * Shutdown the logging system if the logging system
>>>>>>>>>> supports it.
>>>>>>>>>> +     * @param context the LoggerContext.
>>>>>>>>>> +     * @since 2.6
>>>>>>>>>> +     */
>>>>>>>>>> +    public static void shutdown(LoggerContext context) {
>>>>>>>>>> +        if (context != null && context instanceof
>>>>>>>>>> ShutdownCapable) {
>>>>>>>>>> +            ((ShutdownCapable) context).shutdown();
>>>>>>>>>> +        }
>>>>>>>>>> +    }
>>>>>>>>>> +
>>>>>>>>>> +    /**
>>>>>>>>>> +     * Shutdown the logging system if the logging system
>>>>>>>>>> supports it.
>>>>>>>>>> +     * @param fqcn The fully qualified class name of the Class
>>>>>>>>>> that this method is a member of.
>>>>>>>>>> +     * @param currentContext if false the LoggerContext
>>>>>>>>>> appropriate for the caller of this method will be used.
>>>>>>>>>> +     * @since 2.6
>>>>>>>>>> +     */
>>>>>>>>>> +    protected static void shutdown(final String fqcn, final
>>>>>>>>>> boolean currentContext) {
>>>>>>>>>> +        shutdown(getContext(fqcn, currentContext));
>>>>>>>>>> +    }
>>>>>>>>>> +
>>>>>>>>>> +    /**
>>>>>>>>>> +     * Shutdown the logging system if the logging system
>>>>>>>>>> supports it.
>>>>>>>>>> +     * @param fqcn The fully qualified class name of the Class
>>>>>>>>>> that this method is a member of.
>>>>>>>>>> +     * @param loader The ClassLoader for the context. If null
>>>>>>>>>> the context will attempt to determine the appropriate
>>>>>>>>>> +     *            ClassLoader.
>>>>>>>>>> +     * @param currentContext if false the LoggerContext
>>>>>>>>>> appropriate for the caller of this method will be used.
>>>>>>>>>> +     * @since 2.6
>>>>>>>>>> +     */
>>>>>>>>>> +    protected static void shutdown(final String fqcn, final
>>>>>>>>>> ClassLoader loader, final boolean currentContext) {
>>>>>>>>>> +        shutdown(getContext(fqcn, loader, currentContext));
>>>>>>>>>> +    }
>>>>>>>>>> +
>>>>>>>>>> +    /**
>>>>>>>>>>       * Returns the current LoggerContextFactory.
>>>>>>>>>>       *
>>>>>>>>>>       * @return The LoggerContextFactory.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/2df3f0e7/log4j-api/src/main/java/org/apache/logging/log4j/spi/ShutdownCapable.java
>>>>>>>>>>
>>>>>>>>>> ----------------------------------------------------------------------
>>>>>>>>>> diff --git
>>>>>>>>>> a/log4j-api/src/main/java/org/apache/logging/log4j/spi/ShutdownCapable.java
>>>>>>>>>> b/log4j-api/src/main/java/org/apache/logging/log4j/spi/ShutdownCapable.java
>>>>>>>>>> new file mode 100644
>>>>>>>>>> index 0000000..a46ef60
>>>>>>>>>> --- /dev/null
>>>>>>>>>> +++
>>>>>>>>>> b/log4j-api/src/main/java/org/apache/logging/log4j/spi/ShutdownCapable.java
>>>>>>>>>> @@ -0,0 +1,17 @@
>>>>>>>>>> +/*
>>>>>>>>>> + * Copyright (c) 2016 Nextiva, Inc. to Present.
>>>>>>>>>> + * All rights reserved.
>>>>>>>>>> + */
>>>>>>>>>> +package org.apache.logging.log4j.spi;
>>>>>>>>>> +
>>>>>>>>>> +/**
>>>>>>>>>> + * Interface to be implemented by LoggerContext's that provide a
>>>>>>>>>> shutdown method.
>>>>>>>>>> + * @since 2.6
>>>>>>>>>> + */
>>>>>>>>>> +public interface ShutdownCapable {
>>>>>>>>>> +
>>>>>>>>>> +    /**
>>>>>>>>>> +     * Requests that the logging implementation shut down.
>>>>>>>>>> +     */
>>>>>>>>>> +    void shutdown();
>>>>>>>>>> +}
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/2df3f0e7/log4j-api/src/test/java/org/apache/logging/log4j/LogManagerTest.java
>>>>>>>>>>
>>>>>>>>>> ----------------------------------------------------------------------
>>>>>>>>>> diff --git
>>>>>>>>>> a/log4j-api/src/test/java/org/apache/logging/log4j/LogManagerTest.java
>>>>>>>>>> b/log4j-api/src/test/java/org/apache/logging/log4j/LogManagerTest.java
>>>>>>>>>> index 48f0eea..596a9f2 100644
>>>>>>>>>> ---
>>>>>>>>>> a/log4j-api/src/test/java/org/apache/logging/log4j/LogManagerTest.java
>>>>>>>>>> +++
>>>>>>>>>> b/log4j-api/src/test/java/org/apache/logging/log4j/LogManagerTest.java
>>>>>>>>>> @@ -17,6 +17,7 @@
>>>>>>>>>>  package org.apache.logging.log4j;
>>>>>>>>>>
>>>>>>>>>>  import
>>>>>>>>>> org.apache.logging.log4j.message.ParameterizedMessageFactory;
>>>>>>>>>> +import org.apache.logging.log4j.spi.LoggerContext;
>>>>>>>>>>  import org.junit.Test;
>>>>>>>>>>
>>>>>>>>>>  import static org.junit.Assert.*;
>>>>>>>>>> @@ -53,4 +54,10 @@ public class LogManagerTest {
>>>>>>>>>>          assertNotNull("No Logger returned", logger);
>>>>>>>>>>          assertTrue("Incorrect Logger name: " +
>>>>>>>>>> logger.getName(),LogManagerTest.class.getName().equals(logger.getName()));
>>>>>>>>>>      }
>>>>>>>>>> +
>>>>>>>>>> +    @Test
>>>>>>>>>> +    public void testShutdown() {
>>>>>>>>>> +        LoggerContext loggerContext =
>>>>>>>>>> LogManager.getContext(false);
>>>>>>>>>> +        LogManager.shutdown(loggerContext);
>>>>>>>>>> +    }
>>>>>>>>>>  }
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/2df3f0e7/log4j-core/src/main/java/org/apache/logging/log4j/core/LoggerContext.java
>>>>>>>>>>
>>>>>>>>>> ----------------------------------------------------------------------
>>>>>>>>>> diff --git
>>>>>>>>>> a/log4j-core/src/main/java/org/apache/logging/log4j/core/LoggerContext.java
>>>>>>>>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/LoggerContext.java
>>>>>>>>>> index 42efbb5..fcdfc16 100644
>>>>>>>>>> ---
>>>>>>>>>> a/log4j-core/src/main/java/org/apache/logging/log4j/core/LoggerContext.java
>>>>>>>>>> +++
>>>>>>>>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/LoggerContext.java
>>>>>>>>>> @@ -45,6 +45,7 @@ import
>>>>>>>>>> org.apache.logging.log4j.message.MessageFactory;
>>>>>>>>>>  import org.apache.logging.log4j.spi.AbstractLogger;
>>>>>>>>>>  import org.apache.logging.log4j.spi.LoggerContextFactory;
>>>>>>>>>>  import org.apache.logging.log4j.spi.LoggerContextKey;
>>>>>>>>>> +import org.apache.logging.log4j.spi.ShutdownCapable;
>>>>>>>>>>
>>>>>>>>>>  import static
>>>>>>>>>> org.apache.logging.log4j.core.util.ShutdownCallbackRegistry.*;
>>>>>>>>>>
>>>>>>>>>> @@ -54,7 +55,7 @@ import static
>>>>>>>>>> org.apache.logging.log4j.core.util.ShutdownCallbackRegistry.*;
>>>>>>>>>>   * filters, etc and will be atomically updated whenever a
>>>>>>>>>> reconfigure occurs.
>>>>>>>>>>   */
>>>>>>>>>>  public class LoggerContext extends AbstractLifeCycle implements
>>>>>>>>>> org.apache.logging.log4j.spi.LoggerContext,
>>>>>>>>>> -        ConfigurationListener {
>>>>>>>>>> +        ShutdownCapable, ConfigurationListener {
>>>>>>>>>>
>>>>>>>>>>      /**
>>>>>>>>>>       * Property name of the property change event fired if the
>>>>>>>>>> configuration is changed.
>>>>>>>>>> @@ -278,6 +279,11 @@ public class LoggerContext extends
>>>>>>>>>> AbstractLifeCycle implements org.apache.loggi
>>>>>>>>>>      }
>>>>>>>>>>
>>>>>>>>>>      @Override
>>>>>>>>>> +    public void shutdown() {
>>>>>>>>>> +        stop();
>>>>>>>>>> +    }
>>>>>>>>>> +
>>>>>>>>>> +    @Override
>>>>>>>>>>      public void stop() {
>>>>>>>>>>          LOGGER.debug("Stopping LoggerContext[name={}, {}]...",
>>>>>>>>>> getName(), this);
>>>>>>>>>>          configLock.lock();
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>> E-Mail: [email protected] | [email protected]
>>>>>>>> Java Persistence with Hibernate, Second Edition
>>>>>>>> <http://www.manning.com/bauer3/>
>>>>>>>> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
>>>>>>>> Spring Batch in Action <http://www.manning.com/templier/>
>>>>>>>> Blog: http://garygregory.wordpress.com
>>>>>>>> Home: http://garygregory.com/
>>>>>>>> Tweet! http://twitter.com/GaryGregory
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> E-Mail: [email protected] | [email protected]
>>>>>>> Java Persistence with Hibernate, Second Edition
>>>>>>> <http://www.manning.com/bauer3/>
>>>>>>> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
>>>>>>> Spring Batch in Action <http://www.manning.com/templier/>
>>>>>>> Blog: http://garygregory.wordpress.com
>>>>>>> Home: http://garygregory.com/
>>>>>>> Tweet! http://twitter.com/GaryGregory
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> E-Mail: [email protected] | [email protected]
>>>>>> Java Persistence with Hibernate, Second Edition
>>>>>> <http://www.manning.com/bauer3/>
>>>>>> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
>>>>>> Spring Batch in Action <http://www.manning.com/templier/>
>>>>>> Blog: http://garygregory.wordpress.com
>>>>>> Home: http://garygregory.com/
>>>>>> Tweet! http://twitter.com/GaryGregory
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Matt Sicker <[email protected]>
>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> Matt Sicker <[email protected]>
>>>>
>>>
>>>
>>>
>>> --
>>> [image: MagineTV]
>>>
>>> *Mikael Ståldal*
>>> Senior software developer
>>>
>>> *Magine TV*
>>> [email protected]
>>> Grev Turegatan 3  | 114 46 Stockholm, Sweden  |   www.magine.com
>>>
>>> Privileged and/or Confidential Information may be contained in this
>>> message. If you are not the addressee indicated in this message
>>> (or responsible for delivery of the message to such a person), you may
>>> not copy or deliver this message to anyone. In such case,
>>> you should destroy this message and kindly notify the sender by reply
>>> email.
>>>
>>>
>
>
> --
> [image: MagineTV]
>
> *Mikael Ståldal*
> Senior software developer
>
> *Magine TV*
> [email protected]
> Grev Turegatan 3  | 114 46 Stockholm, Sweden  |   www.magine.com
>
> Privileged and/or Confidential Information may be contained in this
> message. If you are not the addressee indicated in this message
> (or responsible for delivery of the message to such a person), you may not
> copy or deliver this message to anyone. In such case,
> you should destroy this message and kindly notify the sender by reply
> email.
>
>


-- 
[image: MagineTV]

*Mikael Ståldal*
Senior software developer

*Magine TV*
[email protected]
Grev Turegatan 3  | 114 46 Stockholm, Sweden  |   www.magine.com

Privileged and/or Confidential Information may be contained in this
message. If you are not the addressee indicated in this message
(or responsible for delivery of the message to such a person), you may not
copy or deliver this message to anyone. In such case,
you should destroy this message and kindly notify the sender by reply
email.

Reply via email to