Switch to side-by-side view

--- a/src/ohproduct.cxx
+++ b/src/ohproduct.cxx
@@ -278,6 +278,7 @@
 
     m_dev->m_ohif->setMetatext("");
 
+    bool ok = true;
     string curtp = o_sources[m_sourceIndex].first;
     string curnm = o_sources[m_sourceIndex].second;
     if (m_dev->m_ohpl && !curtp.compare("Playlist") &&
@@ -294,17 +295,20 @@
                !curtp.compare("Playlist") &&
                !curnm.compare(SndRcvPLName)) {
         m_dev->m_ohpl->setActive(false);
-        m_dev->m_sndrcv->stop();
+        ok = m_dev->m_sndrcv->stop();
     } else if (m_dev->m_sndrcv && m_dev->m_ohrd &&
                !curtp.compare("Radio") &&
                !curnm.compare(SndRcvRDName)) {
         m_dev->setRadio(false);
         m_dev->m_ohrd->setActive(false);
-        m_dev->m_sndrcv->stop();
+        ok = m_dev->m_sndrcv->stop();
     } else {
         // External inputs managed by scripts Analog/Digital/Hdmi etc.
-        m_dev->m_sndrcv->stop();
-    }
+        ok = m_dev->m_sndrcv->stop();
+    }
+
+    if (!ok)
+        return UPNP_E_INTERNAL_ERROR;
 
     string newtp = o_sources[sindex].first;
     string newnm = o_sources[sindex].second;
@@ -317,22 +321,22 @@
         m_dev->m_ohrd->setActive(true);
     } else if (m_dev->m_ohpl && m_dev->m_sndrcv &&
                !newnm.compare(SndRcvPLName)) {
-        m_dev->m_sndrcv->start(string(), 0 /*savedms*/);
+        ok = m_dev->m_sndrcv->start(string(), 0 /*savedms*/);
         m_dev->m_ohpl->setActive(true);
     } else if (m_dev->m_ohrd && m_dev->m_sndrcv &&
                !newnm.compare(SndRcvRDName)) {
-        m_dev->m_sndrcv->start(string());
+        ok = m_dev->m_sndrcv->start(string());
         m_dev->m_ohrd->setActive(true);
     } else {
         string sname = newtp + "-" + newnm;
         string spath = path_cat(scripts_dir, sname);
-        m_dev->m_sndrcv->start(spath);
+        ok = m_dev->m_sndrcv->start(spath);
     }
     m_sourceIndex = sindex;
 
     m_dev->loopWakeup();
 
-    return UPNP_E_SUCCESS;
+    return ok ? UPNP_E_SUCCESS : UPNP_E_INTERNAL_ERROR;
 }
 
 int OHProduct::setSourceIndex(const SoapIncoming& sc, SoapOutgoing&)
@@ -414,10 +418,7 @@
     if (!g_config)
         return;
 
-    {
-        std::unique_lock<std::mutex>(g_configlock);
-        g_config->get("ohsrc_scripts_dir", scripts_dir);
-    }
+    g_config->get("ohsrc_scripts_dir", scripts_dir);
 
     DIR *dirp = opendir(scripts_dir.c_str());
     if (dirp == 0) {