我正在为Ida编写一个插件(在python中),它使用Etcd远程密钥值存储系统。我的问题是当我试图获得服务器上的锁时
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()就像这样,Ida冻结了,我想知道是否有人对为什么会发生这种情况或如何解决它有任何洞察力。
因此,作为参考,包含此内容的方法通过键盘快捷方式调用。
idaapi.add_hotkey('Ctrl-.', self.push_data)毫无疑问,是锁造成了问题。
您可以查看https://github.com/jplana/python-etcd上的python源代码。
发布于 2016-06-27 20:41:02
/_locks/ida_lock**.**目录下已经存在密钥
列出/_locks/ida_lock下的文件
etcdctl ls /_locks/ida_lock要想摆脱这种状况,你可以跑:
etcdctl rm /_locks/ida_lock --dir --recursive为了避免这种情况,您可以在lock.release()块中运行finally,就好像您没有发布一样,/_locks/ida_lock下面将保留一个文件。
此外,您还可以添加一些日志信任(可以参考here),以便在处理此类问题时挖掘更多信息。
https://stackoverflow.com/questions/37996086
复制相似问题