Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1145)

Unified Diff: crash_sender

Issue 3197024: Fix problem with crash_sender being able to run multiple times concurrently. (Closed) Base URL: http://git.chromium.org/git/crash-reporter.git
Patch Set: Comment Created 10 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: crash_sender
diff --git a/crash_sender b/crash_sender
index 5ada4ef1772bb9323e148bc86fd6dcfe88d1131b..d265e18a71c469ab356deea8de38d5112a522183 100644
--- a/crash_sender
+++ b/crash_sender
@@ -9,6 +9,11 @@ set -e
# Product ID in crash report
CHROMEOS_PRODUCT=ChromeOS
+# Should remove the run file when this process finishes. We don't want
+# to always remove it since it may be for pre-existing crash_sender
+# process.
+CLEAN_UP_RUN_FILE=0
+
# File whose existence implies crash reports may be sent, and whose
# contents includes our machine's anonymized guid.
CONSENT_ID="/home/chronos/Consent To Send Stats"
@@ -46,26 +51,36 @@ TAG="$(basename $0)[$$]"
# hours.
TIMESTAMPS_DIR="/var/lib/crash_sender"
+# Temp directory for this process.
+TMP_DIR=""
+
lecho() {
logger -t "${TAG}" "$@"
}
-cleanup_tmp_dir() {
- rm -rf "${TMP_DIR}"
-}
-
-cleanup_run_file_and_tmp_dir() {
- rm -f "${RUN_FILE}"
- cleanup_tmp_dir
+cleanup() {
+ if [ -n "${TMP_DIR}" ]; then
+ rm -rf "${TMP_DIR}"
+ fi
+ if [ ${CLEAN_UP_RUN_FILE} -eq 1 ]; then
+ rm -f "${RUN_FILE}"
+ fi
}
check_not_already_running() {
- if [ ! -f "${RUN_FILE}" ]; then
+ set -o noclobber
+ if echo $$ 2>/dev/null > "${RUN_FILE}"; then
+ # Able to write RUN_FILE without contention.
+ CLEAN_UP_RUN_FILE=1
+ set +o noclobber
return
fi
+ set +o noclobber
local last_pid=$(cat "${RUN_FILE}")
if [ ! -f "/proc/${last_pid}/cmdline" ]; then
- trap cleanup_run_file_and_tmp_dir EXIT INT
+ CLEAN_UP_RUN_FILE=1
+ # Note that this write may be executed by two crash_senders who
+ # simulataneously reap the existing dangling run file
echo $$ > "${RUN_FILE}"
return
fi
@@ -233,6 +248,7 @@ send_crashes() {
}
main() {
+ trap cleanup EXIT INT TERM
if [ -e "${PAUSE_CRASH_SENDING}" ]; then
lecho "Exiting early due to ${PAUSE_CRASH_SENDING}"
exit 1
@@ -246,7 +262,6 @@ main() {
fi
TMP_DIR="$(mktemp -d /tmp/crash_sender.XXXX)"
- trap cleanup_tmp_dir EXIT INT
# Send system-wide crashes
send_crashes "/var/spool/crash"
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698