2013-2-25 17:29:44


2013-2-25 17:29:44

closeSystemDialogs 等map锁


watchdog 怎么有可能调用这个


"watchdog" prio=5 tid=55 SUSPENDED
  | group="main" sCount=1 dsCount=0 obj=0x411359e8 self=0x4ff5a008
  | sysTid=571 nice=0 sched=0/0 cgrp=apps handle=1325156392
  | schedstat=( 0 0 0 ) utm=73 stm=96 core=0
  at android.os.Process.sendSignal(Native Method)
  at com.android.server.am.ActivityManagerService.dumpStackTraces(ActivityManagerService.java:3120)
  at com.android.server.am.ActivityManagerService.dumpStackTraces(ActivityManagerService.java:3099)
  at com.android.server.Watchdog.run(Watchdog.java:538)


每30s走一次,连续2次出了问题就开始dump

对应的消息还是抛到serverThread 线程

 


"android.server.ServerThread" prio=5 tid=11 MONITOR
  | group="main" sCount=1 dsCount=0 obj=0x4112cf90 self=0x53315a20
  | sysTid=452 nice=-2 sched=0/0 cgrp=apps handle=1395661968
  | schedstat=( 0 0 0 ) utm=9313 stm=3393 core=0
  at com.android.server.am.ActivityManagerService.monitor(ActivityManagerService.java:~15477)
  - waiting to lock <0x41137590> (a com.android.server.am.ActivityManagerService) held by tid=30 (InputDispatcher)
  at com.android.server.Watchdog$HeartbeatHandler.handleMessage(Watchdog.java:144)
  at android.os.Handler.dispatchMessage(Handler.java:99)
  at android.os.Looper.loop(Looper.java:137)
  at com.android.server.ServerThread.run(SystemServer.java:891)
 
 
对象锁

 


"Binder_7" prio=5 tid=68 MONITOR
  | group="main" sCount=1 dsCount=0 obj=0x41584a08 self=0x51165358
  | sysTid=710 nice=0 sched=0/0 cgrp=apps handle=1339440672
  | schedstat=( 0 0 0 ) utm=16798 stm=5099 core=0
  at com.android.server.am.ActivityManagerService.stopAppSwitches(ActivityManagerService.java:~7137)
  - waiting to lock <0x41137590> (a com.android.server.am.ActivityManagerService) held by tid=30 (InputDispatcher)
  at com.android.internal.policy.impl.PhoneWindowManager.launchHomeFromHotKey(PhoneWindowManager.java:2293)
  at com.android.internal.policy.impl.PhoneWindowManager.interceptKeyBeforeDispatching(PhoneWindowManager.java:1922)
  at com.android.server.wm.InputMonitor.interceptKeyBeforeDispatching(InputMonitor.java:310)
  at com.android.server.input.InputManagerService.interceptKeyBeforeDispatching(InputManagerService.java:1259)
  at com.android.server.input.InputManagerService.nativeUnregisterInputChannel(Native Method)
  at com.android.server.input.InputManagerService.unregisterInputChannel(InputManagerService.java:414)
  at com.android.server.wm.WindowState.disposeInputChannel(WindowState.java:841)
  at com.android.server.wm.WindowManagerService.removeWindowLocked(WindowManagerService.java:2404)
  at com.android.server.wm.WindowManagerService.removeWindow(WindowManagerService.java:2390)
  at com.android.server.wm.Session.remove(Session.java:149)
  at android.view.IWindowSession$Stub.onTransact(IWindowSession.java:124)
  at com.android.server.wm.Session.onTransact(Session.java:111)
  at android.os.Binder.execTransact(Binder.java:367)
  at dalvik.system.NativeStart.run(Native Method)


remove window 时注销inputchannel的时候等对象锁

 取消输入通道的时候还需要拦截按键? 发现是Home 按键?
 
 
 
 
  "InputDispatcher" prio=10 tid=30 MONITOR
  | group="main" sCount=1 dsCount=0 obj=0x4155a210 self=0x4906c088
  | sysTid=474 nice=-8 sched=0/0 cgrp=apps handle=1388727960
  | schedstat=( 0 0 0 ) utm=13928 stm=12077 core=0
  at com.android.server.wm.WindowManagerService.closeSystemDialogs(WindowManagerService.java:~5073)
  - waiting to lock <0x41562b60> (a java.util.HashMap) held by tid=68 (Binder_7)
  at com.android.server.am.ActivityManagerService.closeSystemDialogsLocked(ActivityManagerService.java:3702)
  at com.android.server.am.ActivityManagerService.closeSystemDialogs(ActivityManagerService.java:3691)
  at com.android.internal.policy.impl.PhoneWindowManager.sendCloseSystemWindows(PhoneWindowManager.java:4279)
  at com.android.internal.policy.impl.PhoneWindowManager.sendCloseSystemWindows(PhoneWindowManager.java:4273)
  at com.android.internal.policy.impl.PhoneWindowManager.launchHomeFromHotKey(PhoneWindowManager.java:2296)
  at com.android.internal.policy.impl.PhoneWindowManager.interceptKeyBeforeDispatching(PhoneWindowManager.java:1922)
  at com.android.server.wm.InputMonitor.interceptKeyBeforeDispatching(InputMonitor.java:310)
  at com.android.server.input.InputManagerService.interceptKeyBeforeDispatching(InputManagerService.java:1259)
  at dalvik.system.NativeStart.run(Native Method)


 这个在等map锁
 
 
这2个线程都在拦截HOME 按键

 

这个就比较奇怪了

3223status_t InputDispatcher::unregisterInputChannelLocked(const sp<InputChannel>& inputChannel,

清除连接和fd

将已有的事件全部清除掉

将所有的命令都执行完


Eliminate potential reentrance from unregisterInputChannel.

Ensure that all callbacks into the window manager policy occur
on the input dispatcher thread in the right place.  This fixes
a potential deadlock that may occur if the window manager
unregisters an input channel while holding its own lock.

The change is simply to defer running asynchronous commands
(usually callbacks into the policy) until the next iteration
of the dispatch looper thread.

你可能感兴趣的:(2013-2-25 17:29:44)