のねのBlog

パソコンの問題や、ソフトウェアの開発で起きた問題など書いていきます。よろしくお願いします^^。

GraphicBuffer: unflatten: registerBuffer failed: Bad address (-14)

以前あった現象
OpenGLRenderer GL error from OpenGLRenderer: 0x505
GraphicBufferMapper registerBuffer failed -14 (Bad address)

今回のログ

    
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000000
18:14:04.256: I/PowerManagerService(1785): Waking up from sleep... 18:14:04.670: D/SurfaceFlinger(129): Screen acquired, type=0 flinger=0x4113b318 18:14:04.802: I/ActivityManager(1785): Process com.google.process.gapps (pid 1705) has died. 18:14:04.904: E/IMGSRV(1785): :0: __map: Map device memory failed 18:14:04.904: W/GraphicBufferMapper(1785): registerBuffer(0x5d98d1a0) failed -14 (Bad address) 18:14:04.904: E/GraphicBuffer(1785): unflatten: registerBuffer failed: Bad address (-14) 18:14:04.904: I/WindowManager(1785): Lock screen displayed! 18:14:04.912: A/libc(1785): Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1), thread 1800 (UI) 18:14:05.021: I/DEBUG(127): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** 18:14:05.021: I/DEBUG(127): Build fingerprint: 'Android/full_maguro/maguro:4.2.1/JOP40D/' 18:14:05.021: I/DEBUG(127): Revision: '9' 18:14:05.021: I/DEBUG(127): pid: 1785, tid: 1800, name: UI >>> system_server <<< 18:14:05.021: I/DEBUG(127): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000000 18:14:05.552: I/DEBUG(127): r0 00000000 r1 00000002 r2 5958ce24 r3 00000000 18:14:05.552: I/DEBUG(127): r4 5efc7b58 r5 5efc7b84 r6 5954a0b4 r7 5dd564fc 18:14:05.552: I/DEBUG(127): r8 00000300 r9 0000877f sl 00008779 fp 00000000 18:14:05.552: I/DEBUG(127): ip 00000000 sp 5efc7b00 lr 595c94cc pc 592304e8 cpsr 60000010 18:14:05.552: I/DEBUG(127): d0 000004a044941000 d1 4000000044941000 18:14:05.560: I/DEBUG(127): d2 3fe0000000000000 d3 bf56c16c16c15177 18:14:05.560: I/DEBUG(127): d4 3bc3198a2e000000 d5 3ba3198a2e000000 18:14:05.560: I/DEBUG(127): d6 0075007400780065 d7 3f19999a00650072 18:14:05.560: I/DEBUG(127): d8 0000000000000310 d9 441c000000000000 18:14:05.560: I/DEBUG(127): d10 400921fb44440000 d11 bfe0000000000000 18:14:05.560: I/DEBUG(127): d12 4000000000000000 d13 3f00000000000000 18:14:05.560: I/DEBUG(127): d14 0000000000000000 d15 0000000000000000 18:14:05.560: I/DEBUG(127): d16 3fe3333340000000 d17 3ff0000000000000 18:14:05.560: I/DEBUG(127): d18 b96377ce858a5d48 d19 3929f5135cb87c55 18:14:05.560: I/DEBUG(127): d20 0000000000000000 d21 397377ce858a5d48 18:14:05.560: I/DEBUG(127): d22 3fa555555555554c d23 bcb1a62633145c07 18:14:05.560: I/DEBUG(127): d24 3ff0000000000000 d25 0000000000000000 18:14:05.560: I/DEBUG(127): d26 4078c00000000000 d27 4081f00000000000 18:14:05.560: I/DEBUG(127): d28 8000000000000000 d29 3ff0000000000000 18:14:05.560: I/DEBUG(127): d30 3ff0000000000000 d31 3ff0000000000000 18:14:05.560: I/DEBUG(127): scr 2000009b 18:14:05.560: I/DEBUG(127): backtrace: 18:14:05.560: I/DEBUG(127): #00 pc 000014e8 /system/vendor/lib/libpvrANDROID_WSEGL.so 18:14:05.560: I/DEBUG(127): #01 pc 0000b4c8 /system/vendor/lib/libsrv_um.so
    221 status_t GraphicBuffer::unflatten(void const* buffer, size_t size,
    222         int fds[], size_t count)
    223 {
    224     if (size < 8*sizeof(int)) return NO_MEMORY;
    225 
    226     int const* buf = static_cast<int const*>(buffer);
    227     if (buf[0] != 'GBFR') return BAD_TYPE;
    228 
    229     const size_t numFds  = buf[6];
    230     const size_t numInts = buf[7];
    231 
    232     const size_t sizeNeeded = (8 + numInts) * sizeof(int);
    233     if (size < sizeNeeded) return NO_MEMORY;
    234 
    235     size_t fdCountNeeded = 0;
    236     if (count < fdCountNeeded) return NO_MEMORY;
    237 
    238     if (handle) {
    239         // free previous handle if any
    240         free_handle();
    241     }
    242 
    243     if (numFds || numInts) {
    244         width  = buf[1];
    245         height = buf[2];
    246         stride = buf[3];
    247         format = buf[4];
    248         usage  = buf[5];
    249         native_handle* h = native_handle_create(numFds, numInts);
    250         memcpy(h->data,          fds,     numFds*sizeof(int));
    251         memcpy(h->data + numFds, &buf[8], numInts*sizeof(int));
    252         handle = h;
    253     } else {
    254         width = height = stride = format = usage = 0;
    255         handle = NULL;
    256     }
    257 
    258     mOwner = ownHandle;
    259 
    260     if (handle != 0) {
    261         status_t err = mBufferMapper.registerBuffer(handle); <=この中でエラーが起きた。
    262         if (err != NO_ERROR) {
    263             ALOGE("unflatten: registerBuffer failed: %s (%d)", <=ここを通った。
    264                     strerror(-err), err);
    265             return err;
    266         }
    267     }
    268 
    269     return NO_ERROR;
    270 }
     49 status_t GraphicBufferMapper::registerBuffer(buffer_handle_t handle)
     50 {
     51     ATRACE_CALL();
     52     status_t err;
     53 
     54     err = mAllocMod->registerBuffer(mAllocMod, handle); <=ここでエラー
     55 
     56     ALOGW_IF(err, "registerBuffer(%p) failed %d (%s)", <=ここを通った。
     57             handle, err, strerror(-err));
     58     return err;
     59 }

以下の感じで登録される

  78 struct private_module_t HAL_MODULE_INFO_SYM = {
     79     base: {
     80         common: {
     81             tag: HARDWARE_MODULE_TAG,
     82             version_major: 1,