Merge "liblog: add __android_log_close()" am: 812d1c7ea2
am: 6322efe522
Change-Id: Ib61d4ec5102fcfb12c48250c019fcdf019c2ffc5
This commit is contained in:
commit
ed421af68d
3 changed files with 49 additions and 1 deletions
|
|
@ -88,6 +88,11 @@ typedef enum android_LogPriority {
|
||||||
ANDROID_LOG_SILENT, /* only for SetMinPriority(); must be last */
|
ANDROID_LOG_SILENT, /* only for SetMinPriority(); must be last */
|
||||||
} android_LogPriority;
|
} 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.
|
* Send a simple string to the log.
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -132,6 +132,41 @@ LIBLOG_ABI_PUBLIC int __android_log_dev_available()
|
||||||
}
|
}
|
||||||
return kLogNotAvailable;
|
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 */
|
/* log_init_lock assumed */
|
||||||
static int __write_to_log_initialize()
|
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(
|
ASSERT_TRUE(NULL != (logger_list = android_logger_list_open(
|
||||||
LOG_ID_EVENTS, ANDROID_LOG_RDONLY | ANDROID_LOG_NONBLOCK, 1000, pid)));
|
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);
|
log_time ts(CLOCK_MONOTONIC);
|
||||||
|
|
||||||
ASSERT_LT(0, __android_log_btwrite(0, EVENT_TYPE_LONG, &ts, sizeof(ts)));
|
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);
|
usleep(1000000);
|
||||||
|
|
||||||
int count = 0;
|
int count = 0;
|
||||||
|
int second_count = 0;
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
log_msg log_msg;
|
log_msg log_msg;
|
||||||
|
|
@ -161,10 +166,13 @@ TEST(liblog, __android_log_btwrite__android_logger_list_read) {
|
||||||
log_time tx(eventData + 4 + 1);
|
log_time tx(eventData + 4 + 1);
|
||||||
if (ts == tx) {
|
if (ts == tx) {
|
||||||
++count;
|
++count;
|
||||||
|
} else if (ts1 == tx) {
|
||||||
|
++second_count;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
EXPECT_EQ(1, count);
|
EXPECT_EQ(1, count);
|
||||||
|
EXPECT_EQ(1, second_count);
|
||||||
|
|
||||||
android_logger_list_close(logger_list);
|
android_logger_list_close(logger_list);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue