Я пишу плагин для Ida (в python), который использует систему хранения значений ключа с дистанционным ключом Etcd. Моя проблема заключается в том, что при попытке получить блокировку на сервереIda Pro 6.9 crash
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)
и нет никаких сомнений, что это замок, который вызывает проблему.
Вы можете посмотреть на питона-etcd источник в https://github.com/jplana/python-etcd
Прошу прощения, я не совсем понимаю. Является ли следствием неправильное использование замков? Если да, пожалуйста, уточните. –
почти справа, но что-то требует вашего внимания. Если «self.client.write» генерирует исключение в вашем коде (просто «если»), ваш код не будет вызывать '' 'lock.release()' '', который оставит ключ в etcd. то в следующий раз, когда вы захотите заблокировать, он просто подождет ... аргумент таймаута, похоже, не работает в этом состоянии ... –
благодарим вас за разработку. –