2016-06-23 11 views
0

私は、Etcdのリモートキー値ストレージシステムを利用するIda(Pythonで)用のプラグインを作成しています。私の問題は、私は、サーバーそうのようなIda Pro 6.9クラッシュ

 lock = etcd.Lock(self.client, 'ida_lock') 
     Should timeout after 30 seconds. Hopefully that is enough. 
     lock.acquire(blocking=True,lock_ttl=None,timeout=30) 
     if lock.is_acquired: 

      data,idc_file = self.get_idc_data() 

      if os.path.isfile('expendable.idc'): 
       self.client.write('/fREd/' + self.md5 + '/all/', idc_file, prevValue = open('expendable.idc','r').readlines()) 
      else: 
       self.client.write('/fREd/' + self.md5 + '/all/', idc_file) 
     lock.release() 

のロックを取得しようとすると、アイダがフリーズし、誰もがこれが起こっまたはどのようにそれを修正している理由上の任意の洞察力を持っていた場合、私は思っていたということです。

だから、参照のためにこれを含む方法は、キーボードショートカット

idaapi.add_hotkey('Ctrl-.', self.push_data) 

経由で呼び出され、それが問題になるのロックであることは間違いありません。

あなたは既にディレクトリ/_locks/ida_lockの下に存在するキーがありますhttps://github.com/jplana/python-etcd

答えて

1

でのpython-etcdソースを見ることができます。

etcdctl ls /_locks/ida_lock 

実行し、これから自分を救出するには:/_locks/ida_lock下のファイルを一覧表示するには

etcdctl rm /_locks/ida_lock --dir --recursive 

をこのような状況を避けるために、あなたがいるかのようにfinallyブロックでlock.release()を実行することができますリリースしないでください。/_locks/ida_lockの下にファイルが残っています。
さらに、この種の問題に対処するときに、いくつかのロギング設定(hereを参照することができます)を追加して詳細を調べることができます。

+0

申し訳ありませんが、私は完全に理解していません。私のロックの使用が間違っているという意味ですか?もしそうなら、詳しく教えてください。 –

+0

ほぼ正しいですが、何かに注意が必要です。 'self.client.write'がコード内で例外をスローする場合(単に 'if')、あなたのコードは '' lock.release() '' 'を呼び出さず、etcdにキーを残します。あなたがロックしたい次の時に、それはちょうど待つでしょう...タイムアウト引数はその状態の下で動作していないようです... –

+0

精巧にお礼を言います。 –

関連する問題