From 897b56045d9ee784dda4ac1d10d84c3573353a0b Mon Sep 17 00:00:00 2001 From: Paul Frederiksen Date: Tue, 7 Oct 2025 16:45:32 -0700 Subject: [PATCH] Add validation to btrestart function - Track old PID before killing bluetoothd - Wait for process to actually stop (5s timeout) - Wait for process to restart (10s timeout) - Verify new PID is different from old PID - Provide clear success/failure feedback - Handle edge cases (no process, restart failure) - Return proper exit codes (0=success, 1=failure) - Maintain simplicity while adding robustness This ensures users know if the restart actually worked. --- plugins/macos/macos.plugin.zsh | 39 ++++++++++++++++++++++++++++++++-- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git a/plugins/macos/macos.plugin.zsh b/plugins/macos/macos.plugin.zsh index e0bfd045a..362e4c280 100644 --- a/plugins/macos/macos.plugin.zsh +++ b/plugins/macos/macos.plugin.zsh @@ -20,8 +20,43 @@ alias hidefiles="defaults write com.apple.finder AppleShowAllFiles -bool false & # Bluetooth restart function btrestart() { echo "Restarting Bluetooth daemon..." - sudo pkill bluetoothd - echo "Bluetooth daemon restarted." + + # Get the current bluetoothd PID before killing + local old_pid=$(pgrep bluetoothd) + + if [ -n "$old_pid" ]; then + echo "Stopping bluetoothd (PID: $old_pid)..." + sudo pkill bluetoothd + + # Wait for the process to actually stop + local count=0 + while pgrep -f "bluetoothd" >/dev/null 2>&1 && [ $count -lt 10 ]; do + sleep 0.5 + count=$((count + 1)) + done + + # Wait for bluetoothd to restart + echo "Waiting for bluetoothd to restart..." + count=0 + while ! pgrep bluetoothd >/dev/null 2>&1 && [ $count -lt 20 ]; do + sleep 0.5 + count=$((count + 1)) + done + + # Check if it restarted successfully + local new_pid=$(pgrep bluetoothd) + if [ -n "$new_pid" ] && [ "$new_pid" != "$old_pid" ]; then + echo "✓ Bluetooth daemon restarted successfully (new PID: $new_pid)" + elif [ -n "$new_pid" ] && [ "$new_pid" = "$old_pid" ]; then + echo "⚠ Bluetooth daemon may not have restarted (same PID: $new_pid)" + else + echo "✗ Bluetooth daemon failed to restart" + return 1 + fi + else + echo "No bluetoothd process found to restart" + return 1 + fi } function _omz_macos_get_frontmost_app() {