Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
M
Magisk
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Administrator
Magisk
Commits
a8030c39
Commit
a8030c39
authored
Jul 02, 2018
by
topjohnwu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Separate logging into its own daemon
parent
7243b9e7
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
153 additions
and
81 deletions
+153
-81
daemon.c
native/jni/core/daemon.c
+30
-16
log_monitor.c
native/jni/core/log_monitor.c
+75
-22
magisk.c
native/jni/core/magisk.c
+1
-1
magiskinit.c
native/jni/core/magiskinit.c
+11
-10
socket.c
native/jni/core/socket.c
+11
-5
daemon.h
native/jni/include/daemon.h
+14
-3
logging.h
native/jni/include/logging.h
+0
-12
magisk.h
native/jni/include/magisk.h
+2
-1
proc_monitor.c
native/jni/magiskhide/proc_monitor.c
+9
-11
No files found.
native/jni/core/daemon.c
View file @
a8030c39
...
@@ -84,6 +84,7 @@ static void *request_handler(void *args) {
...
@@ -84,6 +84,7 @@ static void *request_handler(void *args) {
late_start
(
client
);
late_start
(
client
);
break
;
break
;
default:
default:
close
(
client
);
break
;
break
;
}
}
return
NULL
;
return
NULL
;
...
@@ -105,14 +106,16 @@ void auto_start_magiskhide() {
...
@@ -105,14 +106,16 @@ void auto_start_magiskhide() {
free
(
hide_prop
);
free
(
hide_prop
);
}
}
void
start
_daemon
()
{
void
main
_daemon
()
{
setsid
();
setsid
();
setcon
(
"u:r:"
SEPOL_PROC_DOMAIN
":s0"
);
setcon
(
"u:r:"
SEPOL_PROC_DOMAIN
":s0"
);
int
fd
=
xopen
(
"/dev/null"
,
O_RDWR
|
O_CLOEXEC
);
int
fd
=
xopen
(
"/dev/null"
,
O_RDWR
|
O_CLOEXEC
);
xdup2
(
fd
,
STDIN_FILENO
);
xdup2
(
fd
,
STDOUT_FILENO
);
xdup2
(
fd
,
STDOUT_FILENO
);
xdup2
(
fd
,
STDERR_FILENO
);
xdup2
(
fd
,
STDERR_FILENO
);
close
(
fd
);
close
(
fd
);
fd
=
xopen
(
"/dev/zero"
,
O_RDWR
|
O_CLOEXEC
);
xdup2
(
fd
,
STDIN_FILENO
);
close
(
fd
);
// Block user signals
// Block user signals
sigset_t
block_set
;
sigset_t
block_set
;
...
@@ -121,16 +124,15 @@ void start_daemon() {
...
@@ -121,16 +124,15 @@ void start_daemon() {
sigaddset
(
&
block_set
,
SIGUSR2
);
sigaddset
(
&
block_set
,
SIGUSR2
);
pthread_sigmask
(
SIG_SETMASK
,
&
block_set
,
NULL
);
pthread_sigmask
(
SIG_SETMASK
,
&
block_set
,
NULL
);
// Start the log monitor
monitor_logs
();
struct
sockaddr_un
sun
;
struct
sockaddr_un
sun
;
fd
=
setup_socket
(
&
sun
);
fd
=
setup_socket
(
&
sun
,
MAIN_DAEMON
);
if
(
xbind
(
fd
,
(
struct
sockaddr
*
)
&
sun
,
sizeof
(
sun
)))
if
(
xbind
(
fd
,
(
struct
sockaddr
*
)
&
sun
,
sizeof
(
sun
)))
exit
(
1
);
exit
(
1
);
xlisten
(
fd
,
10
);
xlisten
(
fd
,
10
);
// Start the log monitor
monitor_logs
();
LOGI
(
"Magisk v"
xstr
(
MAGISK_VERSION
)
"("
xstr
(
MAGISK_VER_CODE
)
") daemon started
\n
"
);
LOGI
(
"Magisk v"
xstr
(
MAGISK_VERSION
)
"("
xstr
(
MAGISK_VER_CODE
)
") daemon started
\n
"
);
// Change process name
// Change process name
...
@@ -147,13 +149,11 @@ void start_daemon() {
...
@@ -147,13 +149,11 @@ void start_daemon() {
}
}
}
}
/* Connect the daemon,
and return a socketf
d */
/* Connect the daemon,
set sockfd, and return if new daemon is spawne
d */
int
connect_daemon
(
)
{
int
connect_daemon
2
(
daemon_t
d
,
int
*
sockfd
)
{
struct
sockaddr_un
sun
;
struct
sockaddr_un
sun
;
int
fd
=
setup_socket
(
&
sun
);
*
sockfd
=
setup_socket
(
&
sun
,
d
);
if
(
connect
(
fd
,
(
struct
sockaddr
*
)
&
sun
,
sizeof
(
sun
)))
{
if
(
connect
(
*
sockfd
,
(
struct
sockaddr
*
)
&
sun
,
sizeof
(
sun
)))
{
// If we cannot access the daemon, we start a daemon in the child process if possible
if
(
getuid
()
!=
UID_ROOT
||
getgid
()
!=
UID_ROOT
)
{
if
(
getuid
()
!=
UID_ROOT
||
getgid
()
!=
UID_ROOT
)
{
fprintf
(
stderr
,
"No daemon is currently running!
\n
"
);
fprintf
(
stderr
,
"No daemon is currently running!
\n
"
);
exit
(
1
);
exit
(
1
);
...
@@ -161,12 +161,26 @@ int connect_daemon() {
...
@@ -161,12 +161,26 @@ int connect_daemon() {
if
(
fork_dont_care
()
==
0
)
{
if
(
fork_dont_care
()
==
0
)
{
LOGD
(
"client: connect fail, try launching new daemon process
\n
"
);
LOGD
(
"client: connect fail, try launching new daemon process
\n
"
);
close
(
fd
);
close
(
*
sockfd
);
start_daemon
();
switch
(
d
)
{
case
MAIN_DAEMON
:
main_daemon
();
break
;
case
LOG_DAEMON
:
log_daemon
();
break
;
}
}
}
while
(
connect
(
fd
,
(
struct
sockaddr
*
)
&
sun
,
sizeof
(
sun
)))
while
(
connect
(
*
sock
fd
,
(
struct
sockaddr
*
)
&
sun
,
sizeof
(
sun
)))
usleep
(
10000
);
usleep
(
10000
);
return
1
;
}
}
return
0
;
}
int
connect_daemon
()
{
int
fd
;
connect_daemon2
(
MAIN_DAEMON
,
&
fd
);
return
fd
;
return
fd
;
}
}
native/jni/core/log_monitor.c
View file @
a8030c39
...
@@ -13,9 +13,23 @@
...
@@ -13,9 +13,23 @@
#include "magisk.h"
#include "magisk.h"
#include "utils.h"
#include "utils.h"
#include "
resetprop
.h"
#include "
daemon
.h"
int
loggable
=
1
;
int
loggable
=
1
;
static
int
sockfd
;
static
pthread_t
thread
=
-
1
;
static
pthread_mutex_t
lock
=
PTHREAD_MUTEX_INITIALIZER
;
enum
{
HIDE_EVENT
,
LOG_EVENT
,
DEBUG_EVENT
};
struct
log_listener
{
int
fd
;
int
(
*
filter
)
(
const
char
*
);
};
static
int
am_proc_start_filter
(
const
char
*
log
)
{
static
int
am_proc_start_filter
(
const
char
*
log
)
{
return
strstr
(
log
,
"am_proc_start"
)
!=
NULL
;
return
strstr
(
log
,
"am_proc_start"
)
!=
NULL
;
...
@@ -30,7 +44,7 @@ static int magisk_debug_log_filter(const char *log) {
...
@@ -30,7 +44,7 @@ static int magisk_debug_log_filter(const char *log) {
return
strstr
(
log
,
"am_proc_start"
)
==
NULL
;
return
strstr
(
log
,
"am_proc_start"
)
==
NULL
;
}
}
struct
log_listener
log_events
[]
=
{
st
atic
st
ruct
log_listener
log_events
[]
=
{
{
/* HIDE_EVENT */
{
/* HIDE_EVENT */
.
fd
=
-
1
,
.
fd
=
-
1
,
.
filter
=
am_proc_start_filter
.
filter
=
am_proc_start_filter
...
@@ -58,12 +72,55 @@ static void test_logcat() {
...
@@ -58,12 +72,55 @@ static void test_logcat() {
waitpid
(
log_pid
,
NULL
,
0
);
waitpid
(
log_pid
,
NULL
,
0
);
}
}
static
void
*
logger_thread
(
void
*
args
)
{
static
void
sigpipe_handler
(
int
sig
)
{
close
(
log_events
[
HIDE_EVENT
].
fd
);
log_events
[
HIDE_EVENT
].
fd
=
-
1
;
}
static
void
*
socket_thread
(
void
*
args
)
{
/* This would block, so separate thread */
while
(
1
)
{
int
fd
=
accept4
(
sockfd
,
NULL
,
NULL
,
SOCK_CLOEXEC
);
switch
(
read_int
(
fd
))
{
case
HIDE_CONNECT
:
pthread_mutex_lock
(
&
lock
);
log_events
[
HIDE_EVENT
].
fd
=
fd
;
pthread_mutex_unlock
(
&
lock
);
thread
=
-
1
;
return
NULL
;
default:
close
(
fd
);
break
;
}
}
}
void
log_daemon
()
{
setsid
();
strcpy
(
argv0
,
"magisklogd"
);
struct
sockaddr_un
sun
;
sockfd
=
setup_socket
(
&
sun
,
LOG_DAEMON
);
if
(
xbind
(
sockfd
,
(
struct
sockaddr
*
)
&
sun
,
sizeof
(
sun
)))
exit
(
1
);
xlisten
(
sockfd
,
1
);
LOGI
(
"Magisk v"
xstr
(
MAGISK_VERSION
)
"("
xstr
(
MAGISK_VER_CODE
)
") logger started
\n
"
);
struct
sigaction
act
;
memset
(
&
act
,
0
,
sizeof
(
act
));
act
.
sa_handler
=
sigpipe_handler
;
sigaction
(
SIGPIPE
,
&
act
,
NULL
);
// Setup log dumps
rename
(
LOGFILE
,
LOGFILE
".bak"
);
log_events
[
LOG_EVENT
].
fd
=
xopen
(
LOGFILE
,
O_CREAT
|
O_WRONLY
|
O_TRUNC
|
O_CLOEXEC
,
0644
);
#ifdef MAGISK_DEBUG
log_events
[
DEBUG_EVENT
].
fd
=
xopen
(
DEBUG_LOG
,
O_CREAT
|
O_WRONLY
|
O_TRUNC
|
O_CLOEXEC
,
0644
);
#endif
int
log_fd
=
-
1
,
log_pid
;
int
log_fd
=
-
1
,
log_pid
;
char
line
[
PIPE_BUF
];
char
line
[
PIPE_BUF
];
LOGD
(
"log_monitor: logger start"
);
while
(
1
)
{
while
(
1
)
{
if
(
!
loggable
)
{
if
(
!
loggable
)
{
// Disable all services
// Disable all services
...
@@ -71,7 +128,7 @@ static void *logger_thread(void *args) {
...
@@ -71,7 +128,7 @@ static void *logger_thread(void *args) {
close
(
log_events
[
i
].
fd
);
close
(
log_events
[
i
].
fd
);
log_events
[
i
].
fd
=
-
1
;
log_events
[
i
].
fd
=
-
1
;
}
}
return
NULL
;
return
;
}
}
// Start logcat
// Start logcat
...
@@ -86,10 +143,17 @@ static void *logger_thread(void *args) {
...
@@ -86,10 +143,17 @@ static void *logger_thread(void *args) {
if
(
line
[
0
]
==
'-'
)
if
(
line
[
0
]
==
'-'
)
continue
;
continue
;
size_t
len
=
strlen
(
line
);
size_t
len
=
strlen
(
line
);
pthread_mutex_lock
(
&
lock
);
for
(
int
i
=
0
;
i
<
EVENT_NUM
;
++
i
)
{
for
(
int
i
=
0
;
i
<
EVENT_NUM
;
++
i
)
{
if
(
log_events
[
i
].
fd
>
0
&&
log_events
[
i
].
filter
(
line
))
if
(
log_events
[
i
].
fd
>
0
&&
log_events
[
i
].
filter
(
line
))
x
write
(
log_events
[
i
].
fd
,
line
,
len
);
write
(
log_events
[
i
].
fd
,
line
,
len
);
}
}
if
(
thread
<
0
&&
log_events
[
HIDE_EVENT
].
fd
<
0
)
{
// New thread to handle connection to main daemon
xpthread_create
(
&
thread
,
NULL
,
socket_thread
,
NULL
);
pthread_detach
(
thread
);
}
pthread_mutex_unlock
(
&
lock
);
if
(
kill
(
log_pid
,
0
))
if
(
kill
(
log_pid
,
0
))
break
;
break
;
}
}
...
@@ -101,26 +165,15 @@ static void *logger_thread(void *args) {
...
@@ -101,26 +165,15 @@ static void *logger_thread(void *args) {
waitpid
(
log_pid
,
NULL
,
0
);
waitpid
(
log_pid
,
NULL
,
0
);
test_logcat
();
test_logcat
();
}
}
// Should never be here, but well...
return
NULL
;
}
}
/* Start new threads to monitor logcat and dump to logfile */
/* Start new threads to monitor logcat and dump to logfile */
void
monitor_logs
()
{
void
monitor_logs
()
{
pthread_t
thread
;
test_logcat
();
test_logcat
();
if
(
loggable
)
{
if
(
loggable
)
{
rename
(
LOGFILE
,
LOGFILE
".bak"
);
int
fd
;
log_events
[
LOG_EVENT
].
fd
=
creat
(
LOGFILE
,
0644
);
connect_daemon2
(
LOG_DAEMON
,
&
fd
);
#ifdef MAGISK_DEBUG
write_int
(
fd
,
DO_NOTHING
);
log_events
[
DEBUG_EVENT
].
fd
=
creat
(
DEBUG_LOG
,
0644
);
close
(
fd
);
#endif
// Start logcat monitor
xpthread_create
(
&
thread
,
NULL
,
logger_thread
,
NULL
);
pthread_detach
(
thread
);
}
}
}
}
native/jni/core/magisk.c
View file @
a8030c39
...
@@ -98,7 +98,7 @@ int magisk_main(int argc, char *argv[]) {
...
@@ -98,7 +98,7 @@ int magisk_main(int argc, char *argv[]) {
return
0
;
return
0
;
}
else
if
(
strcmp
(
argv
[
1
],
"--daemon"
)
==
0
)
{
}
else
if
(
strcmp
(
argv
[
1
],
"--daemon"
)
==
0
)
{
int
fd
=
connect_daemon
();
int
fd
=
connect_daemon
();
close
(
fd
);
write_int
(
fd
,
DO_NOTHING
);
return
0
;
return
0
;
}
else
if
(
strcmp
(
argv
[
1
],
"--startup"
)
==
0
)
{
}
else
if
(
strcmp
(
argv
[
1
],
"--startup"
)
==
0
)
{
startup
();
startup
();
...
...
native/jni/core/magiskinit.c
View file @
a8030c39
...
@@ -57,8 +57,6 @@
...
@@ -57,8 +57,6 @@
extern
policydb_t
*
policydb
;
extern
policydb_t
*
policydb
;
int
(
*
init_applet_main
[])
(
int
,
char
*
[])
=
{
magiskpolicy_main
,
magiskpolicy_main
,
NULL
};
int
(
*
init_applet_main
[])
(
int
,
char
*
[])
=
{
magiskpolicy_main
,
magiskpolicy_main
,
NULL
};
static
char
RAND_SOCKET_NAME
[
sizeof
(
SOCKET_NAME
)];
static
int
SOCKET_OFF
=
-
1
;
struct
cmdline
{
struct
cmdline
{
char
skip_initramfs
;
char
skip_initramfs
;
...
@@ -345,18 +343,21 @@ static int dump_magiskrc(const char *path, mode_t mode) {
...
@@ -345,18 +343,21 @@ static int dump_magiskrc(const char *path, mode_t mode) {
static
void
patch_socket_name
(
const
char
*
path
)
{
static
void
patch_socket_name
(
const
char
*
path
)
{
void
*
buf
;
void
*
buf
;
char
name
[
sizeof
(
MAIN_SOCKET
)];
size_t
size
;
size_t
size
;
mmap_rw
(
path
,
&
buf
,
&
size
);
mmap_rw
(
path
,
&
buf
,
&
size
);
if
(
SOCKET_OFF
<
0
)
{
for
(
int
i
=
0
;
i
<
size
;
++
i
)
{
for
(
int
i
=
0
;
i
<
size
;
++
i
)
{
if
(
memcmp
(
buf
+
i
,
SOCKET_NAME
,
sizeof
(
SOCKET_NAME
))
==
0
)
{
if
(
memcmp
(
buf
+
i
,
MAIN_SOCKET
,
sizeof
(
MAIN_SOCKET
))
==
0
)
{
SOCKET_OFF
=
i
;
gen_rand_str
(
name
,
sizeof
(
name
));
break
;
memcpy
(
buf
+
i
,
name
,
sizeof
(
name
));
i
+=
sizeof
(
name
);
}
}
if
(
memcmp
(
buf
+
i
,
LOG_SOCKET
,
sizeof
(
LOG_SOCKET
))
==
0
)
{
gen_rand_str
(
name
,
sizeof
(
name
));
memcpy
(
buf
+
i
,
name
,
sizeof
(
name
));
i
+=
sizeof
(
name
);
}
}
}
}
gen_rand_str
(
RAND_SOCKET_NAME
,
sizeof
(
SOCKET_NAME
));
memcpy
(
buf
+
SOCKET_OFF
,
RAND_SOCKET_NAME
,
sizeof
(
SOCKET_NAME
));
munmap
(
buf
,
size
);
munmap
(
buf
,
size
);
}
}
...
...
native/jni/core/socket.c
View file @
a8030c39
...
@@ -8,19 +8,25 @@
...
@@ -8,19 +8,25 @@
#include "utils.h"
#include "utils.h"
#include "magisk.h"
#include "magisk.h"
static
char
socket_name
[]
=
SOCKET_NAME
;
/* Workaround compiler bug pre NDK r13 */
/* Setup the address and return socket fd */
/* Setup the address and return socket fd */
int
setup_socket
(
struct
sockaddr_un
*
sun
)
{
int
setup_socket
(
struct
sockaddr_un
*
sun
,
daemon_t
d
)
{
int
fd
=
xsocket
(
AF_LOCAL
,
SOCK_STREAM
|
SOCK_CLOEXEC
,
0
);
int
fd
=
xsocket
(
AF_LOCAL
,
SOCK_STREAM
|
SOCK_CLOEXEC
,
0
);
memset
(
sun
,
0
,
sizeof
(
*
sun
));
memset
(
sun
,
0
,
sizeof
(
*
sun
));
sun
->
sun_family
=
AF_LOCAL
;
sun
->
sun_family
=
AF_LOCAL
;
sun
->
sun_path
[
0
]
=
'\0'
;
sun
->
sun_path
[
0
]
=
'\0'
;
memcpy
(
sun
->
sun_path
+
1
,
socket_name
,
sizeof
(
SOCKET_NAME
));
const
char
*
name
;
switch
(
d
)
{
case
MAIN_DAEMON
:
name
=
MAIN_SOCKET
;
break
;
case
LOG_DAEMON
:
name
=
LOG_SOCKET
;
break
;
}
strcpy
(
sun
->
sun_path
+
1
,
name
);
return
fd
;
return
fd
;
}
}
/*
/*
* Receive a file descriptor from a Unix socket.
* Receive a file descriptor from a Unix socket.
* Contributed by @mkasick
* Contributed by @mkasick
...
...
native/jni/include/daemon.h
View file @
a8030c39
...
@@ -24,7 +24,8 @@ enum {
...
@@ -24,7 +24,8 @@ enum {
STOP_MAGISKHIDE
,
STOP_MAGISKHIDE
,
ADD_HIDELIST
,
ADD_HIDELIST
,
RM_HIDELIST
,
RM_HIDELIST
,
LS_HIDELIST
LS_HIDELIST
,
HIDE_CONNECT
};
};
// Return codes for daemon
// Return codes for daemon
...
@@ -39,15 +40,25 @@ enum {
...
@@ -39,15 +40,25 @@ enum {
HIDE_ITEM_NOT_EXIST
,
HIDE_ITEM_NOT_EXIST
,
};
};
typedef
enum
{
MAIN_DAEMON
,
LOG_DAEMON
}
daemon_t
;
// daemon.c
// daemon.c
void
start
_daemon
();
void
main
_daemon
();
int
connect_daemon
();
int
connect_daemon
();
int
connect_daemon2
(
daemon_t
d
,
int
*
sockfd
);
void
auto_start_magiskhide
();
void
auto_start_magiskhide
();
// log_monitor.c
void
log_daemon
();
// socket.c
// socket.c
int
setup_socket
(
struct
sockaddr_un
*
sun
);
int
setup_socket
(
struct
sockaddr_un
*
sun
,
daemon_t
d
);
int
recv_fd
(
int
sockfd
);
int
recv_fd
(
int
sockfd
);
void
send_fd
(
int
sockfd
,
int
fd
);
void
send_fd
(
int
sockfd
,
int
fd
);
int
read_int
(
int
fd
);
int
read_int
(
int
fd
);
...
...
native/jni/include/logging.h
View file @
a8030c39
...
@@ -46,18 +46,6 @@
...
@@ -46,18 +46,6 @@
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__)
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__)
#define PLOGE(fmt, args...) LOGE(fmt " failed with %d: %s", ##args, errno, strerror(errno))
#define PLOGE(fmt, args...) LOGE(fmt " failed with %d: %s", ##args, errno, strerror(errno))
enum
{
HIDE_EVENT
,
LOG_EVENT
,
DEBUG_EVENT
};
struct
log_listener
{
int
fd
;
int
(
*
filter
)
(
const
char
*
);
};
extern
struct
log_listener
log_events
[];
extern
int
loggable
;
extern
int
loggable
;
void
monitor_logs
();
void
monitor_logs
();
...
...
native/jni/include/magisk.h
View file @
a8030c39
...
@@ -7,7 +7,8 @@
...
@@ -7,7 +7,8 @@
#include "logging.h"
#include "logging.h"
#define MAGISK_VER_STR xstr(MAGISK_VERSION) ":MAGISK"
#define MAGISK_VER_STR xstr(MAGISK_VERSION) ":MAGISK"
#define SOCKET_NAME "d30138f2310a9fb9c54a3e0c21f58591"
#define MAIN_SOCKET "d30138f2310a9fb9c54a3e0c21f58591"
#define LOG_SOCKET "5864cd77f2f8c59b3882e2d35dbf51e4"
#define JAVA_PACKAGE_NAME "com.topjohnwu.magisk"
#define JAVA_PACKAGE_NAME "com.topjohnwu.magisk"
#ifndef ARG_MAX
#ifndef ARG_MAX
...
...
native/jni/magiskhide/proc_monitor.c
View file @
a8030c39
...
@@ -16,21 +16,19 @@
...
@@ -16,21 +16,19 @@
#include <sys/mount.h>
#include <sys/mount.h>
#include "magisk.h"
#include "magisk.h"
#include "daemon.h"
#include "utils.h"
#include "utils.h"
#include "magiskhide.h"
#include "magiskhide.h"
static
int
pipefd
[
2
]
=
{
-
1
,
-
1
}
;
static
int
sockfd
=
-
1
;
// Workaround for the lack of pthread_cancel
// Workaround for the lack of pthread_cancel
static
void
term_thread
(
int
sig
)
{
static
void
term_thread
(
int
sig
)
{
LOGD
(
"proc_monitor: running cleanup
\n
"
);
LOGD
(
"proc_monitor: running cleanup
\n
"
);
destroy_list
();
destroy_list
();
hideEnabled
=
0
;
hideEnabled
=
0
;
// Unregister listener
close
(
sockfd
);
log_events
[
HIDE_EVENT
].
fd
=
-
1
;
sockfd
=
-
1
;
close
(
pipefd
[
0
]);
close
(
pipefd
[
1
]);
pipefd
[
0
]
=
pipefd
[
1
]
=
-
1
;
pthread_mutex_destroy
(
&
hide_lock
);
pthread_mutex_destroy
(
&
hide_lock
);
pthread_mutex_destroy
(
&
file_lock
);
pthread_mutex_destroy
(
&
file_lock
);
LOGD
(
"proc_monitor: terminating...
\n
"
);
LOGD
(
"proc_monitor: terminating...
\n
"
);
...
@@ -128,12 +126,12 @@ void proc_monitor() {
...
@@ -128,12 +126,12 @@ void proc_monitor() {
term_thread
(
TERM_THREAD
);
term_thread
(
TERM_THREAD
);
}
}
//
Register our listener to logcat monitor
//
Connect to the log daemon
xpipe2
(
pipefd
,
O_CLOEXEC
);
connect_daemon2
(
LOG_DAEMON
,
&
sockfd
);
log_events
[
HIDE_EVENT
].
fd
=
pipefd
[
1
]
;
write_int
(
sockfd
,
HIDE_CONNECT
)
;
FILE
*
logs
=
fdopen
(
pipefd
[
0
]
,
"r"
);
FILE
*
logs
=
fdopen
(
sockfd
,
"r"
);
char
log
[
PIPE_BUF
],
*
line
;
char
log
[
4096
],
*
line
;
while
(
1
)
{
while
(
1
)
{
/* It might be interrupted */
/* It might be interrupted */
if
(
fgets
(
log
,
sizeof
(
log
),
logs
)
==
NULL
)
if
(
fgets
(
log
,
sizeof
(
log
),
logs
)
==
NULL
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment