liblog: add __android_log_close()
Bug: 30963384 Change-Id: I901e6ac2cc3c601bbecc2d64e00a98e2ab448210
This commit is contained in:
parent
ad52cbb9ec
commit
df7a4c6bae
|
@ -88,6 +88,11 @@ typedef enum android_LogPriority {
|
|||
ANDROID_LOG_SILENT, /* only for SetMinPriority(); must be last */
|
||||
} android_LogPriority;
|
||||
|
||||
/*
|
||||
* Release any logger resources (a new log write will immediately re-acquire)
|
||||
*/
|
||||
void __android_log_close();
|
||||
|
||||
/*
|
||||
* Send a simple string to the log.
|
||||
*/
|
||||
|
|
|
@ -132,6 +132,41 @@ LIBLOG_ABI_PUBLIC int __android_log_dev_available()
|
|||
}
|
||||
return kLogNotAvailable;
|
||||
}
|
||||
/*
|
||||
* Release any logger resources. A new log write will immediately re-acquire.
|
||||
*/
|
||||
LIBLOG_ABI_PUBLIC void __android_log_close()
|
||||
{
|
||||
struct android_log_transport_write *transport;
|
||||
|
||||
__android_log_lock();
|
||||
|
||||
write_to_log = __write_to_log_init;
|
||||
|
||||
/*
|
||||
* Threads that are actively writing at this point are not held back
|
||||
* by a lock and are at risk of dropping the messages with a return code
|
||||
* -EBADF. Prefer to return error code than add the overhead of a lock to
|
||||
* each log writing call to guarantee delivery. In addition, anyone
|
||||
* calling this is doing so to release the logging resources and shut down,
|
||||
* for them to do so with outstanding log requests in other threads is a
|
||||
* disengenuous use of this function.
|
||||
*/
|
||||
|
||||
write_transport_for_each(transport, &__android_log_persist_write) {
|
||||
if (transport->close) {
|
||||
(*transport->close)();
|
||||
}
|
||||
}
|
||||
|
||||
write_transport_for_each(transport, &__android_log_transport_write) {
|
||||
if (transport->close) {
|
||||
(*transport->close)();
|
||||
}
|
||||
}
|
||||
|
||||
__android_log_unlock();
|
||||
}
|
||||
|
||||
/* log_init_lock assumed */
|
||||
static int __write_to_log_initialize()
|
||||
|
|
|
@ -132,12 +132,17 @@ TEST(liblog, __android_log_btwrite__android_logger_list_read) {
|
|||
ASSERT_TRUE(NULL != (logger_list = android_logger_list_open(
|
||||
LOG_ID_EVENTS, ANDROID_LOG_RDONLY | ANDROID_LOG_NONBLOCK, 1000, pid)));
|
||||
|
||||
// Check that we can close and reopen the logger
|
||||
log_time ts(CLOCK_MONOTONIC);
|
||||
|
||||
ASSERT_LT(0, __android_log_btwrite(0, EVENT_TYPE_LONG, &ts, sizeof(ts)));
|
||||
__android_log_close();
|
||||
|
||||
log_time ts1(CLOCK_MONOTONIC);
|
||||
ASSERT_LT(0, __android_log_btwrite(0, EVENT_TYPE_LONG, &ts1, sizeof(ts1)));
|
||||
usleep(1000000);
|
||||
|
||||
int count = 0;
|
||||
int second_count = 0;
|
||||
|
||||
for (;;) {
|
||||
log_msg log_msg;
|
||||
|
@ -161,10 +166,13 @@ TEST(liblog, __android_log_btwrite__android_logger_list_read) {
|
|||
log_time tx(eventData + 4 + 1);
|
||||
if (ts == tx) {
|
||||
++count;
|
||||
} else if (ts1 == tx) {
|
||||
++second_count;
|
||||
}
|
||||
}
|
||||
|
||||
EXPECT_EQ(1, count);
|
||||
EXPECT_EQ(1, second_count);
|
||||
|
||||
android_logger_list_close(logger_list);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue