From 82fed172d53da066a135b9abd86f6c7927ebcaf2 Mon Sep 17 00:00:00 2001
From: Vasilis Flouris <vasilis.flouris@arm.com>
Date: Wed, 29 Apr 2015 11:41:19 +0100
Subject: [PATCH] fix for leaked file descriptors in daq

---
 wlauto/core/configuration.py           |  2 +-
 wlauto/instrumentation/daq/__init__.py | 12 +++++++++++-
 2 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/wlauto/core/configuration.py b/wlauto/core/configuration.py
index 66ea706b..46bcc58e 100644
--- a/wlauto/core/configuration.py
+++ b/wlauto/core/configuration.py
@@ -675,7 +675,7 @@ class RunConfiguration(object):
 
     def _finalize_device_config(self):
         self._load_default_config_if_necessary(self.device)
-        config = _merge_config_dicts(self._raw_config.get(self.device),
+        config = _merge_config_dicts(self._raw_config.get(self.device, {}),
                                      self._raw_config.get('device_config', {}),
                                      list_duplicates='all')
         self.device_config = config
diff --git a/wlauto/instrumentation/daq/__init__.py b/wlauto/instrumentation/daq/__init__.py
index a0f5bbd1..09976e34 100644
--- a/wlauto/instrumentation/daq/__init__.py
+++ b/wlauto/instrumentation/daq/__init__.py
@@ -20,6 +20,7 @@ import os
 import sys
 import csv
 from collections import OrderedDict
+from multiprocessing import Process, Queue
 
 from wlauto import Instrument, Parameter
 from wlauto.exceptions import ConfigError, InstrumentError
@@ -209,7 +210,11 @@ class Daq(Instrument):
 
     def _execute_command(self, command, **kwargs):
         # pylint: disable=E1101
-        result = daq.execute_command(self.server_config, command, **kwargs)
+        q = Queue()
+        p = Process(target=_send_daq_command, args=(q, self.server_config, command), kwargs=kwargs)
+        p.start()
+        result = q.get()
+        p.join()
         if result.status == daq.Status.OK:
             pass  # all good
         elif result.status == daq.Status.OKISH:
@@ -219,3 +224,8 @@ class Daq(Instrument):
         else:
             raise InstrumentError('DAQ: Unexpected result: {} - {}'.format(result.status, result.message))
         return result.data
+
+
+def _send_daq_command(q, *args, **kwargs):
+    result = daq.execute_command(*args, **kwargs)
+    q.put(result)