# Buggy code
def launchTask(self, driver, task):
    """
    Invoked by SchedulerDriver when a Mesos task should be launched by this executor
    """

    def runTask():
        log.debug("Running task %s", task.task_id.value)
        sendUpdate(mesos_pb2.TASK_RUNNING)
        popen = runJob(pickle.loads(task.data))
        self.runningTasks[task.task_id.value] = popen.pid
        try:
            exitStatus = popen.wait()
            if 0 == exitStatus:
                sendUpdate(mesos_pb2.TASK_FINISHED)
            elif -9 == exitStatus:
                sendUpdate(mesos_pb2.TASK_KILLED)
            else:
                sendUpdate(mesos_pb2.TASK_FAILED)
        except:
            exc_type, exc_value, exc_trace = sys.exc_info()
            sendUpdate(
                mesos_pb2.TASK_FAILED,
                message=str(traceback.format_exception_only(exc_type, exc_value)),
            )
        finally:
            del self.runningTasks[task.task_id.value]

    def runJob(job):
        """
        :type job: toil.batchSystems.mesos.ToilJob

        :rtype: subprocess.Popen
        """
        if job.userScript:
            job.userScript.register()
        log.debug("Invoking command: '%s'", job.command)
        with self.popenLock:
            return subprocess.Popen(job.command, shell=True)

    def sendUpdate(taskState, message=""):
        log.debug("Sending status update ...")
        status = mesos_pb2.TaskStatus()
        status.task_id.value = task.task_id.value
        status.message = message
        status.state = taskState
        driver.sendStatusUpdate(status)
        log.debug("Sent status update")

    thread = threading.Thread(target=runTask)
    thread.start()


# Traceback (ConfigParser.NoSectionError)
DEBUG:toil.batchSystems.mesos.executor:Starting executor
I0924 22:47:08.587648 43191 exec.cpp:132] Version: 0.22.0
I0924 22:47:08.592193 43192 exec.cpp:206] Executor registered on slave 20150924-214557-83886090-5050-44087-S8
INFO:toil.batchSystems.mesos.executor:Registered with framework
DEBUG:toil.batchSystems.mesos.executor:Running task 0
DEBUG:toil.batchSystems.mesos.executor:Sending status update ...
DEBUG:toil.batchSystems.mesos.executor:Sent status update
DEBUG:toil.batchSystems.mesos.executor:Invoking command: '/usr/bin/python2.7 -E /usr/local/lib/python2.7/dist-packages/toil/worker.py azure:hgvm:tree2 683b1010_55c3_4978_a7e7_853f17ed1803'
DEBUG:toil.batchSystems.mesos.executor:Sent stats message
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/toil/worker.py", line 408, in <module>
main()
File "/usr/local/lib/python2.7/dist-packages/toil/worker.py", line 89, in main
jobStore = loadJobStore(jobStoreString)
File "/usr/local/lib/python2.7/dist-packages/toil/common.py", line 366, in loadJobStore
return AzureJobStore( account, namePrefix, config=config )
File "/usr/local/lib/python2.7/dist-packages/toil/jobStores/azureJobStore.py", line 78, in __init__
account_key = _fetchAzureAccountKey(accountName)
File "/usr/local/lib/python2.7/dist-packages/toil/jobStores/azureJobStore.py", line 63, in _fetchAzureAccountKey
return configParser.get('AzureStorageCredentials', accountName)
File "/usr/lib/python2.7/ConfigParser.py", line 330, in get
raise NoSectionError(section)
ConfigParser.NoSectionError: No section: 'AzureStorageCredentials'
DEBUG:toil.batchSystems.mesos.executor:Sending status update ...
DEBUG:toil.batchSystems.mesos.executor:Sent status update
I0924 22:47:09.738494 43200 exec.cpp:379] Executor asked to shutdown
CRITICAL:toil.batchSystems.mesos.executor:Shutting down executor...
CRITICAL:toil.batchSystems.mesos.executor:Executor shut down

# Fixed code
def launchTask(self, driver, task):
    """
    Invoked by SchedulerDriver when a Mesos task should be launched by this executor
    """

    def runTask():
        log.debug("Running task %s", task.task_id.value)
        sendUpdate(mesos_pb2.TASK_RUNNING)
        popen = runJob(pickle.loads(task.data))
        self.runningTasks[task.task_id.value] = popen.pid
        try:
            exitStatus = popen.wait()
            if 0 == exitStatus:
                sendUpdate(mesos_pb2.TASK_FINISHED)
            elif -9 == exitStatus:
                sendUpdate(mesos_pb2.TASK_KILLED)
            else:
                sendUpdate(mesos_pb2.TASK_FAILED)
        except:
            exc_type, exc_value, exc_trace = sys.exc_info()
            sendUpdate(
                mesos_pb2.TASK_FAILED,
                message=str(traceback.format_exception_only(exc_type, exc_value)),
            )
        finally:
            del self.runningTasks[task.task_id.value]

    def runJob(job):
        """
        :type job: toil.batchSystems.mesos.ToilJob

        :rtype: subprocess.Popen
        """
        if job.userScript:
            job.userScript.register()
        log.debug("Invoking command: '%s'", job.command)
        with self.popenLock:
            return subprocess.Popen(
                job.command, shell=True, env=dict(os.environ, **job.environment)
            )

    def sendUpdate(taskState, message=""):
        log.debug("Sending status update ...")
        status = mesos_pb2.TaskStatus()
        status.task_id.value = task.task_id.value
        status.message = message
        status.state = taskState
        driver.sendStatusUpdate(status)
        log.debug("Sent status update")

    thread = threading.Thread(target=runTask)
    thread.start()