diff --git a/Process.cpp b/Process.cpp index ea5fbc7..08be28e 100644 --- a/Process.cpp +++ b/Process.cpp @@ -170,6 +170,10 @@ int Process::getPid(const char *s) { return result; } +extern "C" void vold_killProcessesWithOpenFiles(const char *path, int action) { + Process::killProcessesWithOpenFiles(path, action); +} + /* * Hunt down processes that have files open at the given mount point. * action = 0 to just warn, diff --git a/Process.h b/Process.h index fc0c0b7..e745ca4 100644 --- a/Process.h +++ b/Process.h @@ -17,6 +17,8 @@ #ifndef _PROCESS_H #define _PROCESS_H +#ifdef __cplusplus + class Process { public: static void killProcessesWithOpenFiles(const char *path, int action); @@ -32,4 +34,11 @@ private: static int pathMatchesMountPoint(const char *path, const char *mountPoint); }; +extern "C" { +#endif /* __cplusplus */ + void vold_killProcessesWithOpenFiles(const char *path, int action); +#ifdef __cplusplus +} +#endif + #endif diff --git a/cryptfs.c b/cryptfs.c index 020fc7e..cc1a52a 100644 --- a/cryptfs.c +++ b/cryptfs.c @@ -53,6 +53,7 @@ #include "ext4_utils.h" #include "f2fs_sparseblock.h" #include "CheckBattery.h" +#include "Process.h" #include @@ -1450,6 +1451,7 @@ static int wait_and_unmount(char *mountpoint) SLOGD("unmounting %s succeeded\n", mountpoint); rc = 0; } else { + vold_killProcessesWithOpenFiles(mountpoint, 0); SLOGE("unmounting %s failed\n", mountpoint); rc = -1; }