From cca6f3f6a373f726103e71c628ecea82715a0ec4 Mon Sep 17 00:00:00 2001 From: Thibault Saunier Date: Wed, 4 Nov 2015 09:18:05 +0100 Subject: linux_bundle: Use a lock file to avoid several instance of a bundle to be launched To avoid rescanning the registry at each start we symlink the plugins to some user directory and thus we can not have several bundle launched at once --- cerbero/packages/linux_bundle.py | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/cerbero/packages/linux_bundle.py b/cerbero/packages/linux_bundle.py index 7623d5c2..7b6c38d9 100644 --- a/cerbero/packages/linux_bundle.py +++ b/cerbero/packages/linux_bundle.py @@ -28,15 +28,33 @@ from cerbero.packages import PackagerBase LAUNCH_BUNDLE_COMMAND = """# Try to discover plugins only once +LOCKFILE="/tmp/%(appname)s-bundle.lock" +if [ -e $LOCKFILE ] +then + PID=$(cat $LOCKFILE) + if kill -0 $PID 2> /dev/null + then + echo "$? $PID pitivi already running -> exiting" + exit 1 + else + echo "Stalled process $PID allow restarting" + fi +fi +echo $$ > $LOCKFILE + PLUGINS_SYMLINK=${HOME}/.cache/gstreamer-1.0/%(appname)s-gstplugins +rm ${PLUGINS_SYMLINK} > /dev/null 2>&1 ln -s ${APPDIR}/lib/gstreamer-1.0/ ${PLUGINS_SYMLINK} if [ $? -ne 0 ]; then - echo "Bundle is already running, exiting" - exit 1 + export GST_PLUGIN_PATH=${APPDIR}/lib/gstreamer-1.0/ else export GST_PLUGIN_PATH=${PLUGINS_SYMLINK} fi +trap 'ECODE=$?; + echo "[statsgen] Removing lock. Exit: ${ETXT[ECODE]}($ECODE)" >&2 + rm "${PLUGINS_SYMLINK}" "${LOCKFILE}"' 0 + which gdk-pixbuf-query-loaders > /dev/null 2>&1 if [ $? -eq 0 ]; then export GDK_PIXBUF_MODULE_FILE=/tmp/$(basename $APPDIR).gdk-pixbuf-loader.cache -- cgit v1.2.3