Merge "Fix crash while turning bluetooth on, due to a race condition." into froyo

This commit is contained in:
Jaikumar Ganesh
2010-03-31 18:36:35 -07:00
committed by Android (Google) Code Review
2 changed files with 9 additions and 2 deletions

View File

@ -88,6 +88,8 @@ struct event_loop_native_data_t {
int envVer;
/* reference to our java self */
jobject me;
/* flag to indicate if the event loop thread is running */
bool running;
};
struct _Properties {

View File

@ -548,6 +548,8 @@ static void *eventLoopMain(void *ptr) {
dbus_connection_set_watch_functions(nat->conn, dbusAddWatch,
dbusRemoveWatch, dbusToggleWatch, ptr, NULL);
nat->running = true;
while (1) {
for (int i = 0; i < nat->pollMemberCount; i++) {
if (!nat->pollData[i].revents) {
@ -591,7 +593,7 @@ static void *eventLoopMain(void *ptr) {
break;
}
}
while (dbus_connection_dispatch(nat->conn) ==
while (dbus_connection_dispatch(nat->conn) ==
DBUS_DISPATCH_DATA_REMAINS) {
}
@ -607,6 +609,8 @@ static jboolean startEventLoopNative(JNIEnv *env, jobject object) {
pthread_mutex_lock(&(nat->thread_mutex));
nat->running = false;
if (nat->pollData) {
LOGW("trying to start EventLoop a second time!");
pthread_mutex_unlock( &(nat->thread_mutex) );
@ -703,6 +707,7 @@ static void stopEventLoopNative(JNIEnv *env, jobject object) {
nat->controlFdW = 0;
close(fd);
}
nat->running = false;
pthread_mutex_unlock(&(nat->thread_mutex));
#endif // HAVE_BLUETOOTH
}
@ -713,7 +718,7 @@ static jboolean isEventLoopRunningNative(JNIEnv *env, jobject object) {
native_data_t *nat = get_native_data(env, object);
pthread_mutex_lock(&(nat->thread_mutex));
if (nat->pollData) {
if (nat->running) {
result = JNI_TRUE;
}
pthread_mutex_unlock(&(nat->thread_mutex));