From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 28864 invoked by alias); 17 Oct 2014 10:11:33 -0000 Mailing-List: contact gdb-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-owner@sourceware.org Received: (qmail 28850 invoked by uid 89); 17 Oct 2014 10:11:32 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00,RP_MATCHES_RCVD,SPF_HELO_PASS,SPF_PASS autolearn=ham version=3.3.2 X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-GCM-SHA384 encrypted) ESMTPS; Fri, 17 Oct 2014 10:11:31 +0000 Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s9HAB85a015254 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Fri, 17 Oct 2014 06:11:08 -0400 Received: from localhost.localdomain (ovpn-112-31.ams2.redhat.com [10.36.112.31]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s9HAB5bk005257; Fri, 17 Oct 2014 06:11:07 -0400 Message-ID: <5440EB39.2060305@redhat.com> Date: Fri, 17 Oct 2014 10:11:00 -0000 From: Phil Muldoon MIME-Version: 1.0 To: =?UTF-8?B?w5ZtZXIgU2luYW4gQcSfYWNhbg==?= , paul_koning CC: gdb Subject: Re: recursion limit exceeded in Python API, but there's only one function in traceback References: <543FBDFF.3050709@redhat.com> <104DEFBD-D686-4290-8E3C-725A51C165E6@dell.com> <7BB30632-15BE-4EF8-B84F-D35A27772F18@dell.com> In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-IsSubscribed: yes X-SW-Source: 2014-10/txt/msg00059.txt.bz2 On 17/10/14 10:30, Ömer Sinan Ağacan wrote: > I'm still having this problem. I just tried this: > > def handler(): > gdb.execute("continue") > print "continue returned" > > This doesn't print anything, until the script fails with "maximum > recursion depth". Then it prints lots of "continue returned" lines. > > So the problem is `gdb.execute` doesn't immediately return and that's > causing Python stack to grow, because GDB is calling this function > without returning anything to previous calls. > > I think I need a version of `gdb.execute` that returns immediately. > ie. async version or something like that. Is such a thing possible? > > Thanks again. Right. gdb.execute won't return until the command has completed. Also the Python GIL has been acquired (as this is coming from the Python interpreter) and so now Python is also blocked too. So in effect the only thing running at this point is the gdb.execute command that was invoked (in your case, the continue command). That will return, and then the Python GIL will be released and the rest of the script will continue. I have a patch I need to upstream that adds a release_gil keyword to gdb.execute. This optionally releases the GIL before executing the command. But I have not got around to that yet. A workaround would be to post any gdb.execute statements into the GDB event loop. See gdb.post_event. That will return immediately and the gdb.execute function will be scheduled to be called in the event loop. Note there is no guarantee when this is. But as long as GDB is not busy processing other events it usually means right away. I'll work on posting that GIL patch soon. Cheers Phil