From patchwork Tue Jul 25 03:39:35 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 13325653 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0EDB6C00528 for ; Tue, 25 Jul 2023 03:39:55 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230060AbjGYDjy (ORCPT ); Mon, 24 Jul 2023 23:39:54 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39766 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229735AbjGYDjv (ORCPT ); Mon, 24 Jul 2023 23:39:51 -0400 Received: from mail-pl1-x636.google.com (mail-pl1-x636.google.com [IPv6:2607:f8b0:4864:20::636]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 26010171E for ; Mon, 24 Jul 2023 20:39:51 -0700 (PDT) Received: by mail-pl1-x636.google.com with SMTP id d9443c01a7336-1bb9e6c2a90so14291645ad.1 for ; Mon, 24 Jul 2023 20:39:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1690256390; x=1690861190; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=ZYm5KBKtRgmHqsJ7qG78pZ/7OSA76dtqycHyYKXgSwc=; b=HLq21PCypW5pBm+OmMRaVavDQKsrHOsrS24TADqmsS0BDKgV2NdS1+cAK39OXZyksZ NSSyqOUNGaH/Inc7/qkeUQshGNm9MdYqmHnXitzzruqKrCv7cDgwrTtXtKujrNca926t FzmUGo9TSBzxbctnjlv1sPI+2v7NhkekUNiNHS4C8bxjHbG2LDupzrY61H8ifyRRFhPz fDm2lwB4wdJ4WeroJTXU9C2m9l/fSYqufE8ULqGXbEy9TxcAPZuInQzLkfP6zCYymH5u CgtpF8ZEYsHDT4cCmU+etMKOOZWyXQcNM4Gbc7Jd2o2250JocsPEHl6owowqcSCVWxu1 kMAA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690256390; x=1690861190; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ZYm5KBKtRgmHqsJ7qG78pZ/7OSA76dtqycHyYKXgSwc=; b=BtmvsNJo1TRG7kzYXRxFmgZxigUNdVnNj3tBCNW2RJ37eTyPb7f5QIkYqLhXZB9jOq q0pBbhqbTF74TuU5MK+lSphFAyg4DA70A8BE2YYYbRK7TtbnL8GrXewI5xADbzPX2ppx MIrdLia7ZgE2afqg7HAqbubCfq63s/484k91neNbKq4Xvy4y/2pTnCYZn7flEjuZaZHW Wwnd55u6giLiiSxY8A3ZRWnZHICI6biZAGNeuosYAeXSyY+NZ+T7PuX8cQC5paB0NcCP oRkq2c+2/qce6kVPzM/pP07ABQ8oScmFK44iyHpVkchBA4/WGjPqq9IdwM15S9bhzYNN Bh6w== X-Gm-Message-State: ABy/qLbs7eyGZBT0V6ocQofSJevzCQdApJnPIFiMpjyma2t1hJaYFL// ryfZQ1mwnlEVmZHsdY8NNfpGW9b+cxc= X-Google-Smtp-Source: APBJJlHmlwkxy/1k+VB2FrYgeT+RuUU9bbvZ47VOVWeB+Xgfql8wE5x5ci7ODC6WUhILTb17fN81Wg== X-Received: by 2002:a17:903:230b:b0:1b8:9b5e:65c8 with SMTP id d11-20020a170903230b00b001b89b5e65c8mr16049113plh.4.1690256390381; Mon, 24 Jul 2023 20:39:50 -0700 (PDT) Received: from wheely.local0.net ([118.102.104.45]) by smtp.gmail.com with ESMTPSA id i5-20020a170902c94500b001b809082a69sm9793112pla.235.2023.07.24.20.39.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Jul 2023 20:39:50 -0700 (PDT) From: Nicholas Piggin To: kvm@vger.kernel.org Cc: Nicholas Piggin , Paolo Bonzini , Thomas Huth , Nico Boehr Subject: [kvm-unit-tests PATCH 1/3] migration: Fix test harness hang on fifo Date: Tue, 25 Jul 2023 13:39:35 +1000 Message-Id: <20230725033937.277156-2-npiggin@gmail.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20230725033937.277156-1-npiggin@gmail.com> References: <20230725033937.277156-1-npiggin@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org If the test fails before migration is complete, the input fifo for the destination machine is not written to and that can leave cat waiting for input. Clear that condition in the error handler so the harness doesn't hang in this case. Signed-off-by: Nicholas Piggin Reviewed-by: Nico Boehr --- scripts/arch-run.bash | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/arch-run.bash b/scripts/arch-run.bash index 5e7e4201..518607f4 100644 --- a/scripts/arch-run.bash +++ b/scripts/arch-run.bash @@ -165,6 +165,7 @@ run_migration () migstatus=`qmp ${qmp1} '"query-migrate"' | grep return` if grep -q '"failed"' <<<"$migstatus" ; then echo "ERROR: Migration failed." >&2 + echo > ${fifo} qmp ${qmp1} '"quit"'> ${qmpout1} 2>/dev/null qmp ${qmp2} '"quit"'> ${qmpout2} 2>/dev/null return 2 From patchwork Tue Jul 25 03:39:36 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 13325654 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id B24F0C0015E for ; Tue, 25 Jul 2023 03:39:57 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230395AbjGYDj4 (ORCPT ); Mon, 24 Jul 2023 23:39:56 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39790 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229934AbjGYDjz (ORCPT ); Mon, 24 Jul 2023 23:39:55 -0400 Received: from mail-pf1-x435.google.com (mail-pf1-x435.google.com [IPv6:2607:f8b0:4864:20::435]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id F0D531712 for ; Mon, 24 Jul 2023 20:39:53 -0700 (PDT) Received: by mail-pf1-x435.google.com with SMTP id d2e1a72fcca58-666eec46206so4758862b3a.3 for ; Mon, 24 Jul 2023 20:39:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1690256393; x=1690861193; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=uzLR3F7S7iyxMgTaa6P6CQt1AaDb4dzAxc+FVHI9xRA=; b=erRAFX1fS8zUpfwRh8YeNr61s8REwhxloQXoPivU/ap2LYwi0bc9/7gJz3Hc0k3ZoA TQ8j17KXzvOR3nXkFeEu3JDOF2cqlHDBr1DuVerxbm4eo9RAEAZKDmcqIJeGXY45yM3q 4V6wt/jQ2Fd0ZK4SwKngTQcKH8hvLWLVDpieyQcGcNQ9mJeRynP/F6tBUv8oqTPIR2+Z apfqyroYU7Q48FPRvpv6eZGd9Js/1iBUQrdh6tCyujeuzCddHsfHtsUcCv9r9LBK5s4z kzQDl+XxroabsNTdt4hJVXla+UxX0gt6Qvq/hp+mRePi9kSLq/8YHYp9cTD3vj+NcBfu +odg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690256393; x=1690861193; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=uzLR3F7S7iyxMgTaa6P6CQt1AaDb4dzAxc+FVHI9xRA=; b=b9p0wp1jEHEjRE6hMMnO4FtdFgYOz5cOch6v7vN6yfMb1IIryKte1zgK+xFPaxoYdB YlJ34L5KvbjRfnRyUTEi4f2tNF9us5V93qVjzJ45FgMbQ+3BE6Fd18lLnNySHgi1bzag OKv8PE+ccd9Edm8SW4qBQVa2YpoAK0WD31r+DLw9z4Uu1rnKehaF5khoxWbpJ9QDJRIa TBbicguKIOrRqRg+hFvKFJS4n1QaXXs/DXvBqqJCeMdyRthrI7Z2OKFpjgCnxtdW50nO Ou6GTHRDkU4AST/mv1Puyx2Vld9BPM+j7+/INSfbicfArpX/2cfAhK1AlQ8eNf1Pn9QK V8fA== X-Gm-Message-State: ABy/qLbAk+eiKtDgTa5SdLbhhsUhjjyvh7ljR6UDLuYFRJNnkj8eKZuE sr8zQXbNtVGYc4ZRu1os6THubOO101I= X-Google-Smtp-Source: APBJJlEU0cw2IOUsXF7Q5jP28I0sn4FrhiK/VxVjLIiU9EmpLrEAUcy4idCEd9kWLeobwL+X/SoLdg== X-Received: by 2002:a17:902:cec1:b0:1b8:8dbd:e1a0 with SMTP id d1-20020a170902cec100b001b88dbde1a0mr15345101plg.13.1690256393209; Mon, 24 Jul 2023 20:39:53 -0700 (PDT) Received: from wheely.local0.net ([118.102.104.45]) by smtp.gmail.com with ESMTPSA id i5-20020a170902c94500b001b809082a69sm9793112pla.235.2023.07.24.20.39.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Jul 2023 20:39:52 -0700 (PDT) From: Nicholas Piggin To: kvm@vger.kernel.org Cc: Nicholas Piggin , Paolo Bonzini , Thomas Huth , Nico Boehr Subject: [kvm-unit-tests PATCH 2/3] migration: Fix test harness hang if source does not reach migration point Date: Tue, 25 Jul 2023 13:39:36 +1000 Message-Id: <20230725033937.277156-3-npiggin@gmail.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20230725033937.277156-1-npiggin@gmail.com> References: <20230725033937.277156-1-npiggin@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org After starting the test, the harness waits polling for "migrate" in the output. If the test does not print for some reason, the harness hangs. Test that the pid is still alive while polling to fix this hang. While here, wait for the full string "Now migrate the VM", which I think makes it more obvious to read and could avoid an unfortunate collision with some debugging output in a test case. Signed-off-by: Nicholas Piggin Reviewed-by: Nico Boehr --- scripts/arch-run.bash | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/scripts/arch-run.bash b/scripts/arch-run.bash index 518607f4..30e535c7 100644 --- a/scripts/arch-run.bash +++ b/scripts/arch-run.bash @@ -142,6 +142,7 @@ run_migration () eval "$@" -chardev socket,id=mon1,path=${qmp1},server=on,wait=off \ -mon chardev=mon1,mode=control | tee ${migout1} & + live_pid=`jobs -l %+ | grep "eval" | awk '{print$2}'` # We have to use cat to open the named FIFO, because named FIFO's, unlike # pipes, will block on open() until the other end is also opened, and that @@ -152,7 +153,14 @@ run_migration () incoming_pid=`jobs -l %+ | awk '{print$2}'` # The test must prompt the user to migrate, so wait for the "migrate" keyword - while ! grep -q -i "migrate" < ${migout1} ; do + while ! grep -q -i "Now migrate the VM" < ${migout1} ; do + if ! ps -p ${live_pid} > /dev/null ; then + echo "ERROR: Test exit before migration point." >&2 + echo > ${fifo} + qmp ${qmp1} '"quit"'> ${qmpout1} 2>/dev/null + qmp ${qmp2} '"quit"'> ${qmpout2} 2>/dev/null + return 3 + fi sleep 1 done From patchwork Tue Jul 25 03:39:37 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 13325655 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9BC1BC04A6A for ; Tue, 25 Jul 2023 03:40:03 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231260AbjGYDkB (ORCPT ); Mon, 24 Jul 2023 23:40:01 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39870 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230195AbjGYDj6 (ORCPT ); Mon, 24 Jul 2023 23:39:58 -0400 Received: from mail-pl1-x629.google.com (mail-pl1-x629.google.com [IPv6:2607:f8b0:4864:20::629]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2C953173D for ; Mon, 24 Jul 2023 20:39:57 -0700 (PDT) Received: by mail-pl1-x629.google.com with SMTP id d9443c01a7336-1bb775625e2so19994055ad.1 for ; Mon, 24 Jul 2023 20:39:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1690256396; x=1690861196; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=McUqq8F18rjKUkfgDDmWRJciO+eOkScPdFBftk4eTRU=; b=cPEEBbSJRcPurMMaZ88qjs2nRnjd8rpkZzHjPwOqBd7MuUcYXHXl3uK+WMDecIvYDy lv4RGB1z9jToLOw2agxgQWJzQK9xVsDQNJ2trhAAWMcRW1nZMKkQxgM/OwKdh594Nq5P qGbvxVMJcnMM5DJOn1X6uv/OeD7FSev/dIavmNnWQkzTnZO4dMXuVjYXX9ssYTEqo3+Q jQ0m5rwjrsIO4pVlu1VYvVk3wJBXhRoO4GtqLqpbvhTN08Pd/uQkSgjrgZAstX4x0gA+ +gkZ4rjsy4z2CO56Ef6L1LT/hf9lX6khM0N0Xq+g1ZNi/crl7KvJG8xb+ZJhvfGaihz4 qp6g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690256396; x=1690861196; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=McUqq8F18rjKUkfgDDmWRJciO+eOkScPdFBftk4eTRU=; b=JSCCmRCNMV0Aw/HY7S8SmYWThrJKT63DBmxfEoaKQNuoXVkV2zh0SR2WjReOhnSoCL 5K8e5DvIjGGHco1HVi+5gnohBukHWm5F43suW29Dol3PAlBDzTw1J5JAXxkVCUusbxSw iABixaMSvkzVKShY6ojloP00xxU8bG48N1txo3xY7SZOlJapBHm8u1Cpar4tNmlfStMi IoYsmrB6YkwnJNSq+/hiMwGoNsRzZZuyELdfnTfRH3A2dXG9g3+Y4A8ADmZ+jrn2cEMi EO5jXp2CVJHC9VTK2BB1MQDGNu0ytJkSOLT3fJm7+FsdwHe31f91x6IwEAxcz1kTeasv yr0Q== X-Gm-Message-State: ABy/qLYHRgWi50KbFnC/L1yadpv84rmNFynzkXR9K/En7riaRVQI9idr yLPBN1yoo7x7XH71vWuHUTq7+HcLaeA= X-Google-Smtp-Source: APBJJlHXTVB3ZRTnKN9wcNbUwiYwM3sCLFgNSDI/W9i4+CSkZEYJ2lJn8aE47V2/KEWGSiQMegzH8A== X-Received: by 2002:a17:902:ced0:b0:1b8:3936:7b64 with SMTP id d16-20020a170902ced000b001b839367b64mr1690700plg.1.1690256396158; Mon, 24 Jul 2023 20:39:56 -0700 (PDT) Received: from wheely.local0.net ([118.102.104.45]) by smtp.gmail.com with ESMTPSA id i5-20020a170902c94500b001b809082a69sm9793112pla.235.2023.07.24.20.39.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Jul 2023 20:39:55 -0700 (PDT) From: Nicholas Piggin To: kvm@vger.kernel.org Cc: Nicholas Piggin , Paolo Bonzini , Thomas Huth , Nico Boehr Subject: [kvm-unit-tests PATCH 3/3] arch-run: Support multiple migrations Date: Tue, 25 Jul 2023 13:39:37 +1000 Message-Id: <20230725033937.277156-4-npiggin@gmail.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20230725033937.277156-1-npiggin@gmail.com> References: <20230725033937.277156-1-npiggin@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org Support multiple migrations by flipping dest file/socket variables to source after the migration is complete, ready to start again. A new destination is created if the test outputs the migrate line again. Test cases may now switch to calling migrate() one or more times. Signed-off-by: Nicholas Piggin --- lib/migrate.c | 8 +++---- lib/migrate.h | 1 + scripts/arch-run.bash | 54 +++++++++++++++++++++++++++++++++++-------- 3 files changed, 50 insertions(+), 13 deletions(-) diff --git a/lib/migrate.c b/lib/migrate.c index 527e63ae..b7721659 100644 --- a/lib/migrate.c +++ b/lib/migrate.c @@ -8,8 +8,10 @@ #include #include "migrate.h" -/* static for now since we only support migrating exactly once per test. */ -static void migrate(void) +/* + * Initiate migration and wait for it to complete. + */ +void migrate(void) { puts("Now migrate the VM, then press a key to continue...\n"); (void)getchar(); @@ -19,8 +21,6 @@ static void migrate(void) /* * Initiate migration and wait for it to complete. * If this function is called more than once, it is a no-op. - * Since migrate_cmd can only migrate exactly once this function can - * simplify the control flow, especially when skipping tests. */ void migrate_once(void) { diff --git a/lib/migrate.h b/lib/migrate.h index 3c94e6af..2af06a72 100644 --- a/lib/migrate.h +++ b/lib/migrate.h @@ -6,4 +6,5 @@ * Author: Nico Boehr */ +void migrate(void); void migrate_once(void); diff --git a/scripts/arch-run.bash b/scripts/arch-run.bash index 30e535c7..e3155104 100644 --- a/scripts/arch-run.bash +++ b/scripts/arch-run.bash @@ -131,26 +131,55 @@ run_migration () migsock=$(mktemp -u -t mig-helper-socket.XXXXXXXXXX) migout1=$(mktemp -t mig-helper-stdout1.XXXXXXXXXX) + migout2=$(mktemp -t mig-helper-stdout2.XXXXXXXXXX) qmp1=$(mktemp -u -t mig-helper-qmp1.XXXXXXXXXX) qmp2=$(mktemp -u -t mig-helper-qmp2.XXXXXXXXXX) fifo=$(mktemp -u -t mig-helper-fifo.XXXXXXXXXX) qmpout1=/dev/null qmpout2=/dev/null + migcmdline=$@ trap 'kill 0; exit 2' INT TERM - trap 'rm -f ${migout1} ${migsock} ${qmp1} ${qmp2} ${fifo}' RETURN EXIT + trap 'rm -f ${migout1} ${migout2} ${migsock} ${qmp1} ${qmp2} ${fifo}' RETURN EXIT - eval "$@" -chardev socket,id=mon1,path=${qmp1},server=on,wait=off \ + eval "$migcmdline" -chardev socket,id=mon1,path=${qmp1},server=on,wait=off \ -mon chardev=mon1,mode=control | tee ${migout1} & live_pid=`jobs -l %+ | grep "eval" | awk '{print$2}'` + # This starts the first source QEMU in advance of the test reaching the + # migration point, since we expect at least one migration. Subsequent + # sources are started as the test hits migrate keywords. + do_migration || return $? + + while ps -p ${live_pid} > /dev/null ; do + # Wait for EXIT or further migrations + if ! grep -q -i "Now migrate the VM" < ${migout1} ; then + sleep 0.5 + else + do_migration || return $? + fi + done + + wait ${live_pid} + ret=$? + + while (( $(jobs -r | wc -l) > 0 )); do + sleep 0.5 + done + + return $ret +} + +do_migration () +{ # We have to use cat to open the named FIFO, because named FIFO's, unlike # pipes, will block on open() until the other end is also opened, and that # totally breaks QEMU... mkfifo ${fifo} - eval "$@" -chardev socket,id=mon2,path=${qmp2},server=on,wait=off \ - -mon chardev=mon2,mode=control -incoming unix:${migsock} < <(cat ${fifo}) & - incoming_pid=`jobs -l %+ | awk '{print$2}'` + + eval "$migcmdline" -chardev socket,id=mon2,path=${qmp2},server=on,wait=off \ + -mon chardev=mon2,mode=control -incoming unix:${migsock} < <(cat ${fifo}) | tee ${migout2} & + incoming_pid=`jobs -l %+ | grep Running | awk '{print$2}'` # The test must prompt the user to migrate, so wait for the "migrate" keyword while ! grep -q -i "Now migrate the VM" < ${migout1} ; do @@ -181,12 +210,19 @@ run_migration () done qmp ${qmp1} '"quit"'> ${qmpout1} 2>/dev/null echo > ${fifo} - wait $incoming_pid + rm ${fifo} + + wait ${live_pid} ret=$? - while (( $(jobs -r | wc -l) > 0 )); do - sleep 0.5 - done + # Now flip the variables because dest becomes source + live_pid=${incoming_pid} + tmp=${migout1} + migout1=${migout2} + migout2=${tmp} + tmp=${qmp1} + qmp1=${qmp2} + qmp2=${tmp} return $ret }