私は、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
申し訳ありませんが、私は完全に理解していません。私のロックの使用が間違っているという意味ですか?もしそうなら、詳しく教えてください。 –
ほぼ正しいですが、何かに注意が必要です。 'self.client.write'がコード内で例外をスローする場合(単に 'if')、あなたのコードは '' lock.release() '' 'を呼び出さず、etcdにキーを残します。あなたがロックしたい次の時に、それはちょうど待つでしょう...タイムアウト引数はその状態の下で動作していないようです... –
精巧にお礼を言います。 –