From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp37.i.mail.ru (smtp37.i.mail.ru [94.100.177.97]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dev.tarantool.org (Postfix) with ESMTPS id CFA6A445320 for ; Wed, 22 Jul 2020 15:46:57 +0300 (MSK) Date: Wed, 22 Jul 2020 15:46:56 +0300 From: Kirill Yukhin Message-ID: <20200722124656.nvu2zrxumesrnuwn@tarantool.org> References: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: Subject: Re: [Tarantool-patches] [PATCH] gdb: fix the extension to be loaded with Python 2 List-Id: Tarantool development patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Igor Munkin Cc: tarantool-patches@dev.tarantool.org, Alexander Turenko Hello, On 04 июл 22:58, Igor Munkin wrote: > There was a mystic error when the extension was loaded against old gdb > versions build against Python 2: > | (gdb) source luajit-gdb.py > | Traceback (most recent call last): > | File "luajit-gdb.py", line 702, in > | load(None) > | File "luajit-gdb.py", line 699, in load > | 'lj-gc': LJGC, > | File "luajit-gdb.py", line 687, in init > | command(name) > | File "luajit-gdb.py", line 468, in __init__ > | gdb.write('{} command initialized\n'.format(name)) > | ValueError: sequence.index(x): x not in sequence > > I made a little investigation (for more info see the mentioned issue) > and found the next fun fact: the exception was raised much earlier to > , more precisely in . > However, the handled exception is preserved until call and > hits the condition underneath leading to the extension load failure. > > As a result to avoid the exception raise, the special global variable is > introduced for legacy (i.e. Python 2) environment. It checks whether any > callback is associated with new_objfile event prior to disconnecting it. > This variable usage is encapsulated within two introduced routines: > and which are wrappers for ones provided by gdb. > > Furthermore, after diving to gdb sources related to Python embedding, I > found that callbacks are grouped into an internal list. Previous > implementation appended the function to this callback list on > each its unsuccessful call, but only the successful one is removes it > from the list. Thereby disconnect action is moved prior to connect one > so there is no more than one instance kept in callback list. > > Fixes tarantool/tarantool#4828 > > Reported-by: Oleg Babin > Signed-off-by: Igor Munkin I've checked your patch into Tarantool's luajit repo and bumped a new version in 1.10, 2.4, 2.5 and master branches. -- Regards, Kirill Yukhin