am c0af9caf: am b14d72bc: am d070009e: am df6774c9: am 7c1cdbdd: am e23f8b8f: am 1f70863d: am 37b44969: Add support for writing byte arrays to parcels * commit 'c0af9cafba1217e2585777964730c70e40957dcd': Add support for writing byte arrays to parcels
diff --git a/cmds/dumpstate/Android.mk b/cmds/dumpstate/Android.mk index 094dbc2..3194dbf 100644 --- a/cmds/dumpstate/Android.mk +++ b/cmds/dumpstate/Android.mk
@@ -9,7 +9,7 @@ LOCAL_MODULE := dumpstate -LOCAL_SHARED_LIBRARIES := libcutils liblog +LOCAL_SHARED_LIBRARIES := libcutils liblog libselinux ifdef BOARD_LIB_DUMPSTATE LOCAL_STATIC_LIBRARIES := $(BOARD_LIB_DUMPSTATE)
diff --git a/cmds/dumpstate/dumpstate.c b/cmds/dumpstate/dumpstate.c index 9a332a9..89bea91 100644 --- a/cmds/dumpstate/dumpstate.c +++ b/cmds/dumpstate/dumpstate.c
@@ -315,7 +315,13 @@ ); } +static void sigpipe_handler(int n) { + (void)n; + exit(EXIT_FAILURE); +} + int main(int argc, char *argv[]) { + struct sigaction sigact; int do_add_date = 0; int do_compress = 0; int do_vibrate = 1; @@ -336,7 +342,9 @@ } ALOGI("begin\n"); - signal(SIGPIPE, SIG_IGN); + memset(&sigact, 0, sizeof(sigact)); + sigact.sa_handler = sigpipe_handler; + sigaction(SIGPIPE, &sigact, NULL); /* set as high priority, and protect from OOM killer */ setpriority(PRIO_PROCESS, 0, -20);
diff --git a/cmds/dumpstate/utils.c b/cmds/dumpstate/utils.c index 9b0013e..fe716ac 100644 --- a/cmds/dumpstate/utils.c +++ b/cmds/dumpstate/utils.c
@@ -38,6 +38,8 @@ #include <cutils/sockets.h> #include <private/android_filesystem_config.h> +#include <selinux/android.h> + #include "dumpstate.h" /* list of native processes to include in the native dumps */ @@ -467,6 +469,9 @@ if (!mkdir(anr_traces_dir, 0775)) { chown(anr_traces_dir, AID_SYSTEM, AID_SYSTEM); chmod(anr_traces_dir, 0775); + if (selinux_android_restorecon(anr_traces_dir) == -1) { + fprintf(stderr, "restorecon failed for %s: %s\n", anr_traces_dir, strerror(errno)); + } } else if (errno != EEXIST) { fprintf(stderr, "mkdir(%s): %s\n", anr_traces_dir, strerror(errno)); return NULL;
diff --git a/include/android/configuration.h b/include/android/configuration.h index d5cddb3..6d8784d 100644 --- a/include/android/configuration.h +++ b/include/android/configuration.h
@@ -113,6 +113,8 @@ ACONFIGURATION_UI_MODE = 0x1000, ACONFIGURATION_SMALLEST_SCREEN_SIZE = 0x2000, ACONFIGURATION_LAYOUTDIR = 0x4000, + + ACONFIGURATION_MNC_ZERO = 0xffff, }; /**
diff --git a/include/android/input.h b/include/android/input.h index c8ac938..fead769 100644 --- a/include/android/input.h +++ b/include/android/input.h
@@ -692,7 +692,7 @@ /* Get the time that a historical movement occurred between this event and * the previous event, in the java.lang.System.nanoTime() time base. */ -int64_t AMotionEvent_getHistoricalEventTime(AInputEvent* motion_event, +int64_t AMotionEvent_getHistoricalEventTime(const AInputEvent* motion_event, size_t history_index); /* Get the historical raw X coordinate of this event for the given pointer index that @@ -719,14 +719,14 @@ * occurred between this event and the previous motion event. * Whole numbers are pixels; the value may have a fraction for input devices * that are sub-pixel precise. */ -float AMotionEvent_getHistoricalX(AInputEvent* motion_event, size_t pointer_index, +float AMotionEvent_getHistoricalX(const AInputEvent* motion_event, size_t pointer_index, size_t history_index); /* Get the historical Y coordinate of this event for the given pointer index that * occurred between this event and the previous motion event. * Whole numbers are pixels; the value may have a fraction for input devices * that are sub-pixel precise. */ -float AMotionEvent_getHistoricalY(AInputEvent* motion_event, size_t pointer_index, +float AMotionEvent_getHistoricalY(const AInputEvent* motion_event, size_t pointer_index, size_t history_index); /* Get the historical pressure of this event for the given pointer index that @@ -734,7 +734,7 @@ * The pressure generally ranges from 0 (no pressure at all) to 1 (normal pressure), * although values higher than 1 may be generated depending on the calibration of * the input device. */ -float AMotionEvent_getHistoricalPressure(AInputEvent* motion_event, size_t pointer_index, +float AMotionEvent_getHistoricalPressure(const AInputEvent* motion_event, size_t pointer_index, size_t history_index); /* Get the current scaled value of the approximate size for the given pointer index that @@ -744,7 +744,7 @@ * touch is normalized with the device specific range of values * and scaled to a value between 0 and 1. The value of size can be used to * determine fat touch events. */ -float AMotionEvent_getHistoricalSize(AInputEvent* motion_event, size_t pointer_index, +float AMotionEvent_getHistoricalSize(const AInputEvent* motion_event, size_t pointer_index, size_t history_index); /* Get the historical length of the major axis of an ellipse that describes the touch area
diff --git a/include/gui/GLConsumer.h b/include/gui/GLConsumer.h index f0a75dc..1ef54f5 100644 --- a/include/gui/GLConsumer.h +++ b/include/gui/GLConsumer.h
@@ -85,6 +85,9 @@ // purely to allow a GLConsumer to be transferred from one consumer // context to another. If such a transfer is not needed there is no // requirement that either of these methods be called. + GLConsumer(const sp<BufferQueue>& bq, + GLuint tex, GLenum texTarget = GL_TEXTURE_EXTERNAL_OES, + bool useFenceSync = true); GLConsumer(GLuint tex, bool allowSynchronousMode = true, GLenum texTarget = GL_TEXTURE_EXTERNAL_OES, bool useFenceSync = true, const sp<BufferQueue> &bufferQueue = 0);
diff --git a/include/input/KeycodeLabels.h b/include/input/KeycodeLabels.h new file mode 100644 index 0000000..1e91ea8 --- /dev/null +++ b/include/input/KeycodeLabels.h
@@ -0,0 +1,6 @@ +#ifndef _LIBINPUT_KEYCODE_LABELS_H +#define _LIBINPUT_KEYCODE_LABELS_H + +#include <androidfw/KeycodeLabels.h> + +#endif // _LIBINPUT_KEYCODE_LABELS_H
diff --git a/include/utils/Log.h b/include/utils/Log.h index 98c441c..4259c86 100644 --- a/include/utils/Log.h +++ b/include/utils/Log.h
@@ -62,7 +62,7 @@ * } */ #define ALOGD_IF_SLOW(timeoutMillis, message) \ - LogIfSlow _logIfSlow(LOG_TAG, ANDROID_LOG_DEBUG, timeoutMillis, message); + android::LogIfSlow _logIfSlow(LOG_TAG, ANDROID_LOG_DEBUG, timeoutMillis, message); } // namespace android
diff --git a/libs/binder/MemoryBase.cpp b/libs/binder/MemoryBase.cpp index 5c82330..033066b 100644 --- a/libs/binder/MemoryBase.cpp +++ b/libs/binder/MemoryBase.cpp
@@ -14,7 +14,6 @@ * limitations under the License. */ -#define LOG_TAG "MemoryBase" #include <stdlib.h> #include <stdint.h> @@ -45,11 +44,3 @@ // --------------------------------------------------------------------------- }; // namespace android - -// Backwards compatibility for libdatabase_sqlcipher (http://b/8253769). -extern "C" void _ZN7android10MemoryBaseC1ERKNS_2spINS_11IMemoryHeapEEEij(void*, void*, ssize_t, size_t); -extern "C" void _ZN7android10MemoryBaseC1ERKNS_2spINS_11IMemoryHeapEEElj(void* obj, void* h, long o, unsigned int size) { - _ZN7android10MemoryBaseC1ERKNS_2spINS_11IMemoryHeapEEEij(obj, h, o, size); - ALOGW("Using temporary compatibility workaround for usage of MemoryBase " - "private API. Please fix your application!"); -}
diff --git a/libs/binder/Parcel.cpp b/libs/binder/Parcel.cpp index 53b29a4..33366a6 100644 --- a/libs/binder/Parcel.cpp +++ b/libs/binder/Parcel.cpp
@@ -1483,6 +1483,8 @@ if (objectsSize) { objects = (size_t*)malloc(objectsSize*sizeof(size_t)); if (!objects) { + free(data); + mError = NO_MEMORY; return NO_MEMORY; } @@ -1563,7 +1565,7 @@ mError = NO_MEMORY; return NO_MEMORY; } - + if(!(mDataCapacity == 0 && mObjects == NULL && mObjectsCapacity == 0)) { ALOGE("continueWrite: %d/%p/%d/%d", mDataCapacity, mObjects, mObjectsCapacity, desired);
diff --git a/libs/gui/GLConsumer.cpp b/libs/gui/GLConsumer.cpp index bec0f90..dc46a51 100644 --- a/libs/gui/GLConsumer.cpp +++ b/libs/gui/GLConsumer.cpp
@@ -78,6 +78,13 @@ static void mtxMul(float out[16], const float a[16], const float b[16]); +GLConsumer::GLConsumer(const sp<BufferQueue>& bq, GLuint tex, + GLenum texTarget, bool useFenceSync) : + ConsumerBase(bq), + mUseFenceSync(useFenceSync), + mTexTarget(texTarget) {} + + GLConsumer::GLConsumer(GLuint tex, bool allowSynchronousMode, GLenum texTarget, bool useFenceSync, const sp<BufferQueue> &bufferQueue) : ConsumerBase(bufferQueue == 0 ? new BufferQueue(allowSynchronousMode) : bufferQueue),
diff --git a/opengl/libs/EGL/eglApi.cpp b/opengl/libs/EGL/eglApi.cpp index a243b32..f39c386 100644 --- a/opengl/libs/EGL/eglApi.cpp +++ b/opengl/libs/EGL/eglApi.cpp
@@ -373,7 +373,7 @@ if (native_window_api_connect(window, NATIVE_WINDOW_API_EGL) != OK) { ALOGE("EGLNativeWindowType %p already connected to another API", window); - return setError(EGL_BAD_NATIVE_WINDOW, EGL_NO_SURFACE); + return setError(EGL_BAD_ALLOC, EGL_NO_SURFACE); } // set the native window's buffers format to match this config @@ -517,8 +517,11 @@ egl_connection_t* cnx = NULL; const egl_display_ptr dp = validate_display_connection(dpy, cnx); - if (dpy) { + if (dp) { if (share_list != EGL_NO_CONTEXT) { + if (!ContextRef(dp.get(), share_list).get()) { + return setError(EGL_BAD_CONTEXT, EGL_NO_CONTEXT); + } egl_context_t* const c = get_context(share_list); share_list = c->context; } @@ -602,7 +605,7 @@ // validate the context (if not EGL_NO_CONTEXT) if ((ctx != EGL_NO_CONTEXT) && !_c.get()) { // EGL_NO_CONTEXT is valid - return EGL_FALSE; + return setError(EGL_BAD_CONTEXT, EGL_FALSE); } // these are the underlying implementation's object @@ -623,12 +626,12 @@ impl_ctx = c->context; } else { // no context given, use the implementation of the current context + if (draw != EGL_NO_SURFACE || read != EGL_NO_SURFACE) { + // calling eglMakeCurrent( ..., !=0, !=0, EGL_NO_CONTEXT); + return setError(EGL_BAD_MATCH, EGL_FALSE); + } if (cur_c == NULL) { // no current context - if (draw != EGL_NO_SURFACE || read != EGL_NO_SURFACE) { - // calling eglMakeCurrent( ..., !=0, !=0, EGL_NO_CONTEXT); - return setError(EGL_BAD_MATCH, EGL_FALSE); - } // not an error, there is just no current context. return EGL_TRUE; } @@ -636,12 +639,14 @@ // retrieve the underlying implementation's draw EGLSurface if (draw != EGL_NO_SURFACE) { + if (!_d.get()) return setError(EGL_BAD_SURFACE, EGL_FALSE); d = get_surface(draw); impl_draw = d->surface; } // retrieve the underlying implementation's read EGLSurface if (read != EGL_NO_SURFACE) { + if (!_r.get()) return setError(EGL_BAD_SURFACE, EGL_FALSE); r = get_surface(read); impl_read = r->surface; }
diff --git a/opengl/tests/gl2_jni/jni/gl_code.cpp b/opengl/tests/gl2_jni/jni/gl_code.cpp index fa6bd93..ed896a4 100644 --- a/opengl/tests/gl2_jni/jni/gl_code.cpp +++ b/opengl/tests/gl2_jni/jni/gl_code.cpp
@@ -153,7 +153,7 @@ JNIEXPORT void JNICALL Java_com_android_gl2jni_GL2JNILib_step(JNIEnv * env, jobject obj); }; -JNIEXPORT void JNICALL Java_com_android_gl2jni_GL2JNILib_init(JNIEnv * env, jobject obj, jint width, jint height) +JNIEXPORT void JNICALL Java_com_android_gl2jni_GL2JNILib_init(JNIEnv * env, jobject obj, jint width, jint height) { setupGraphics(width, height); }
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index 1cc5eb2..e4d3c5f 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -1037,6 +1037,12 @@ { ATRACE_CALL(); + // here we keep a copy of the drawing state (that is the state that's + // going to be overwritten by handleTransactionLocked()) outside of + // mStateLock so that the side-effects of the State assignment + // don't happen with mStateLock held (which can cause deadlocks). + State drawingState(mDrawingState); + Mutex::Autolock _l(mStateLock); const nsecs_t now = systemTime(); mDebugInTransaction = now; @@ -1537,7 +1543,11 @@ const bool hasGlesComposition = hwc.hasGlesComposition(id) || (cur==end); if (hasGlesComposition) { - DisplayDevice::makeCurrent(mEGLDisplay, hw, mEGLContext); + if (!DisplayDevice::makeCurrent(mEGLDisplay, hw, mEGLContext)) { + ALOGW("DisplayDevice::makeCurrent failed. Aborting surface composition for display %s", + hw->getDisplayName().string()); + return; + } // set the frame buffer glMatrixMode(GL_MODELVIEW);