The problem was:
1. In handleShutter(), thread A in CameraService calls
registerBuffers(IMemoryHeap) and it's received by thread B
in system_server. [transaction 1]
2. While thread A is waiting for the reply, thread B calls
back to thread A to get the id of the heap
(IMemoryHeap.getHeapID). [transaction 2]
3. Thread A replies transaction 2 and is preemptied in kernel.
Thread B gets the reply and finishes registerBuffers and send
reply for transaction 1.
4. When thread A runs again, it gets the reply for transaction 1
and returns to handleShutter().
5. At this point the transaction buffer for transaction 2 (which
holds a reference to IMemoryHeap) is not freed because the
BC_FREE_BUFFER command is kept in thread A's local command
queue and not sent to the kernel.
6. Normally when thread A makes next transaction, the
BC_FREE_BUFFER command will be sent together (piggyback) with
the commands for that transaction. But in this case thread A
is a callback thread from camera driver, so it does not make
any binder calls afterwards, and the IMemoryHeap is never freed
(until the next time handleShutter is called).
Change-Id: I435a258187509bdbbaf353339eb9ea577610cbd2
Merge commit '6ffd9ff07733a855daeda75416cea88e7456e9d6' into gingerbread-plus-aosp
* commit '6ffd9ff07733a855daeda75416cea88e7456e9d6':
Log full exception when failing to inflate notification view
Merge commit '8ae5a8e7c04c7b204b739dfcd5da9e2e0f83e1eb' into gingerbread-plus-aosp
* commit '8ae5a8e7c04c7b204b739dfcd5da9e2e0f83e1eb':
Get to the point of being able to do native drawing.
Merge commit 'f520411a35db5248934a4b50859ca72e3f865593' into gingerbread-plus-aosp
* commit 'f520411a35db5248934a4b50859ca72e3f865593':
Fix issue 2811538: System server crash when disconnecting BT headset after using SCO off call.
Merge commit 'c03befe3d62eb2a3e1d56fec0ca188a6094d53dd' into gingerbread
* commit 'c03befe3d62eb2a3e1d56fec0ca188a6094d53dd':
Fix issue 2811538: System server crash when disconnecting BT headset after using SCO off call.
Merge commit '54a181b1a2b1517a9479b21fbf7705a688232faf' into gingerbread-plus-aosp
* commit '54a181b1a2b1517a9479b21fbf7705a688232faf':
Make real API for native code to get its window.
Merge commit 'c7dacb7374e04c003b0764e7c348765b629c18cb' into gingerbread-plus-aosp
* commit 'c7dacb7374e04c003b0764e7c348765b629c18cb':
DO NOT MERGE: Add a battery capacity value to the power profile.
Merge commit 'a0c2b53966238125143dec01d3f2598a8b9e33a2' into gingerbread-plus-aosp
* commit 'a0c2b53966238125143dec01d3f2598a8b9e33a2':
Fix issue 2811538: System server crash when disconnecting BT headset after using SCO off call.
Merge commit '45bac57aa00281e6b45756c691c588bdaf762521' into gingerbread-plus-aosp
* commit '45bac57aa00281e6b45756c691c588bdaf762521':
Support for writing the extracted data to an .mp4 file in the stagefright commandline tool.
Merge commit 'a2dd4c17bbe47876b909b09f54505deda379d2b4' into gingerbread-plus-aosp
* commit 'a2dd4c17bbe47876b909b09f54505deda379d2b4':
put the status bar back in the system process
Merge commit '09b9005769f2b717f637131578ce6cfa6bd62bd9' into gingerbread-plus-aosp
* commit '09b9005769f2b717f637131578ce6cfa6bd62bd9':
Add multiple camera support for in MediaProfiles.
Merge commit '160edb3645f8b7012bab70ae6e6e8c4a5733082b' into gingerbread-plus-aosp
* commit '160edb3645f8b7012bab70ae6e6e8c4a5733082b':
Add ability to guard a thread against setting its own prio to bg
Merge commit 'c6e1d88022db800773401c16803e1ab27fd01a7e' into gingerbread-plus-aosp
* commit 'c6e1d88022db800773401c16803e1ab27fd01a7e':
Introduce official public NativeWindow type.
Merge commit '30fe6fa07a9b9c6e7498198608125add8eb40744' into gingerbread-plus-aosp
* commit '30fe6fa07a9b9c6e7498198608125add8eb40744':
fix live wallpapers on Droid
On omap3 h/w we force opaque formats to RGB_565 instead of RGBX_8888
because the GL driver doesn't support it. RGBX_8888 is always remapped
to RGBA_8888.
Change-Id: I0bfabeb98c8d3a399079e6797cf2a0ee95915324
Merge commit 'c8525edcba58cba7ce17ef72bc64fc3439943c08' into gingerbread-plus-aosp
* commit 'c8525edcba58cba7ce17ef72bc64fc3439943c08':
Remove memory monitoring from the system watchdog
Merge commit '294c9fb8990ded73be52a3c1bfddbe1cebcd8b8e' into gingerbread-plus-aosp
* commit '294c9fb8990ded73be52a3c1bfddbe1cebcd8b8e':
Improved graphics for the intruder alert.
Merge commit 'caad0a5c6318678902402362df1791d286636344' into gingerbread-plus-aosp
* commit 'caad0a5c6318678902402362df1791d286636344':
Support for vanilla YUV420sp => RGB565 color conversion.
Merge commit '24c737ccdd64475178d53677f90a300fcfbab79f' into gingerbread-plus-aosp
* commit '24c737ccdd64475178d53677f90a300fcfbab79f':
Verify hostname where possible, and clarify where not.
Merge commit '92dbad8ab0c8e242c4c3e52c339ed3296ae7901c' into gingerbread-plus-aosp
* commit '92dbad8ab0c8e242c4c3e52c339ed3296ae7901c':
docs: revise menu guide to focus more on using menu resources
Not yet hooked up to anything in the NDK, but requires renaming
the existing android_native_window_t type everywhere.
Change-Id: Iffee6ea39c93b8b34e20fb69e4d2c7c837e5ea2e
This change mainly unwinds a premature optimization in the
dispatch pipeline.
To test HOME injection, run 'adb shell input keyevent 3'.
Change-Id: I1c4b7377c205da7c898014b8b07fc6dc1d46e4dd
Merge commit 'd581484ef8fac80c15ebf652e66f918374df5109' into gingerbread
* commit 'd581484ef8fac80c15ebf652e66f918374df5109':
Verify hostname where possible, and clarify where not.
The native code now maintains a list of all keys that may use
default handling. If the app finishes one of these keys
without handling it, the key will be passed back off to Java
for default treatment.
Change-Id: I6a842a0d728eeafa4de7142fae573f8c11099e18
Merge commit 'b4d2e42a8508a09f944b13f27c043952eef6c1cc' into gingerbread
* commit 'b4d2e42a8508a09f944b13f27c043952eef6c1cc':
docs: revise menu guide to focus more on using menu resources
Merge commit 'f7679a0493d59da8c759a6be639be5110c50fb98' into gingerbread-plus-aosp
* commit 'f7679a0493d59da8c759a6be639be5110c50fb98':
Added encoding parameters set up for H263 video encoder