| #!/bin/bash |
| |
| # Copyright (c) 2012 The Chromium OS Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| # Work around a bug on precise where gvfs trash goes looking in mounts |
| # it shouldn't, resulting in the umount failing when it shouldn't. |
| # See crosbug.com/23443 for the sordid details. |
| |
| suppressed_dir=$(dirname "$0") |
| cleaned_path=$(echo "${PATH}" | sed -r -e "s,(^|:)${suppressed_dir}(:|$),,g") |
| binary=$(PATH="${cleaned_path}" type -P umount) |
| if [ $? -ne 0 ]; then |
| echo "umount: command not found" >&2 |
| exit 127 |
| fi |
| |
| for x in {1..10}; do |
| # umount doesn't give use a distinct exit code for device is busy; thus grep |
| # the output. |
| output=$(LC_ALL=C "${binary}" "$@" 2>&1) |
| ret=$? |
| if [ ${ret} -eq 0 ] || [[ "${output}" != *"device is busy"* ]]; then |
| # Nothing to do in these scenarios; either ran fine, or it failed in a non |
| # busy fashion. |
| break |
| fi |
| sleep 1 |
| done |
| |
| echo -n "${output}" >&2 |
| exit ${ret} |