Hi,
 
while I am using DirectFB with fusion, some time the application was locked. we 
debugged into, find lock is in fusion. I looked the code, found a place seems 
missed unlock (see red line or comment). if any one knows linux-fusion, please 
make sure. both 3.x or 7.x have same code.
 
Thanks,
Victor Liu
 
int
fusion_skirmish_prevail (FusionDev *dev, int id, int fusion_id)
{
  int ret;
  FusionSkirmish *skirmish;
#ifdef FUSION_DEBUG_SKIRMISH_DEADLOCK
  FusionSkirmish *s;
  int i;
  bool outer = true;
#endif
  dev->stat.skirmish_prevail_swoop++;
  ret = fusion_skirmish_lock( &dev->skirmish, id, true, &skirmish );
  if (ret)
    return ret;
 
  ......
 
  up( &dev->skirmish.lock );
  while (skirmish->lock_pid) {
    ret = fusion_skirmish_wait( skirmish, NULL );
    if (ret)
    {
      fusion_skirmish_unlock( skirmish );  // original code does not have this 
line
      return ret;
    }
  }
  skirmish->lock_fid = fusion_id;
  skirmish->lock_pid = current->pid;
  skirmish->lock_count = 1;
  skirmish->lock_total++;
  fusion_skirmish_unlock( skirmish );
  return 0;
}
 
_________________________________________________________________
Your smile counts. The more smiles you share, the more we donate.  Join in.
www.windowslive.com/smile?ocid=TXT_TAGLM_Wave2_oprsmilewlhmtagline
_______________________________________________
directfb-dev mailing list
[email protected]
http://mail.directfb.org/cgi-bin/mailman/listinfo/directfb-dev

Reply via email to