Fix handling of MTP fork/child process
Change-Id: Iacd8a38d21e9c8b0dfafefbeb646f46cd3ba02a1
diff --git a/mtp/twrpMtp.cpp b/mtp/twrpMtp.cpp
index e7c3f2c..9a7df5b 100755
--- a/mtp/twrpMtp.cpp
+++ b/mtp/twrpMtp.cpp
@@ -99,6 +99,8 @@
if (pid == 0) {
// Child process
start();
+ MTPD("MTP child process exited.\n");
+ _exit(0);
} else {
return pid;
}
diff --git a/partitionmanager.cpp b/partitionmanager.cpp
index bc27ccb..d83518b 100644
--- a/partitionmanager.cpp
+++ b/partitionmanager.cpp
@@ -29,6 +29,7 @@
#include <fcntl.h>
#include <iostream>
#include <iomanip>
+#include <sys/wait.h>
#include "variables.h"
#include "twcommon.h"
#include "partitions.hpp"
@@ -2212,8 +2213,12 @@
TWFunc::write_file("/sys/class/android_usb/android0/idVendor", vendorstr);
TWFunc::write_file("/sys/class/android_usb/android0/idProduct", productstr);
if (mtppid) {
- kill(mtppid, SIGTERM);
+ LOGINFO("Disabling MTP\n");
+ int status;
+ kill(mtppid, SIGKILL);
mtppid = 0;
+ // We don't care about the exit value, but this prevents a zombie process
+ waitpid(mtppid, &status, 0);
}
property_set("sys.usb.config", "adb");
DataManager::SetValue("tw_mtp_enabled", 0);