From: Tom de Vries <tdevries@suse.de>
To: Tom Tromey <tromey@adacore.com>
Cc: Tom Tromey via Gdb-patches <gdb-patches@sourceware.org>
Subject: [PATCH] [gdb/python] Avoid queue.SimpleQueue for python 3.6
Date: Thu, 5 Jan 2023 10:49:05 +0100 [thread overview]
Message-ID: <a4acfae5-f73a-5db8-909e-28ec15a2acb3@suse.de> (raw)
In-Reply-To: <0b6635ea-ee55-1edd-6f4b-149a3ab200f5@suse.de>
[-- Attachment #1: Type: text/plain, Size: 2414 bytes --]
[ was: Re: [PATCH] Initial implementation of Debugger Adapter Protocol ]
On 1/4/23 13:27, Tom de Vries wrote:
> On 1/4/23 12:59, Tom de Vries via Gdb-patches wrote:
>> On 1/3/23 15:14, Tom Tromey wrote:
>>> Tom> /home/vries/gdb_versions/devel/src/gdb/python/py-dap.c: In member
>>> Tom> function ‘virtual void dap_interp::init(bool)’:
>>> Tom> /home/vries/gdb_versions/devel/src/gdb/python/py-dap.c:83:27:
>>> error:
>>> Tom> ‘PyObject_CallNoArgs’ was not declared in this scope
>>> Tom> gdbpy_ref<> result_obj (PyObject_CallNoArgs (func.get ()));
>>> Tom> ^~~~~~~~~~~~~~~~~~~
>>> Tom> /home/vries/gdb_versions/devel/src/gdb/python/py-dap.c:83:27: note:
>>> Tom> suggested alternative: ‘_PyObject_CallNoArg’
>>> Tom> gdbpy_ref<> result_obj (PyObject_CallNoArgs (func.get ()));
>>> Tom> ^~~~~~~~~~~~~~~~~~~
>>> Tom> _PyObject_CallNoArg
>>> Tom> ...
>>>
>>> Sorry about that. I'm going to apply the appended, which should fix the
>>> problem.
>>
>> That fixed the build problem, thanks for that.
>>
>> Now I'm running into an error in the testsuite:
>> ...
>> ERROR: eof reading json header
>> while executing
>> "error "eof reading json header""
>> invoked from within
>> "expect {
>> -i exp19 -timeout 10
>> -re "^Content-Length: (\[0-9\]+)\r\n" {
>> set length $expect_out(1,string)
>> exp_continue
>> }
>> -re "^(\[^\r\n\]+)..."
>> ("uplevel" body line 1)
>> invoked from within
>> "uplevel $body" NONE eof reading json header
>> UNRESOLVED: gdb.dap/basic-dap.exp: startup - initialize
>> ...
>
> Hmm, that seems to be because:
> ...
> (gdb)
> #5 0x0000000000a59a7c in gdbpy_handle_exception ()
> at /home/vries/gdb_versions/devel/src/gdb/python/py-utils.c:396
> 396 error (_("Error occurred in Python: %s"), msg.get ());
> (gdb) p msg.get ()
> $1 = 0x2b91d10 "module 'queue' has no attribute 'SimpleQueue'"
> ...
>
> That's new in python 3.7, and I have:
> ...
> $ ldd ./gdb | grep python
> libpython3.6m.so.1.0 => /usr/lib64/libpython3.6m.so.1.0
> (0x00007f93ed624000)
> ...
Fixed by attached commit, any comments?
Thanks,
- Tom
[-- Attachment #2: 0001-gdb-python-Avoid-queue.SimpleQueue-for-python-3.6.patch --]
[-- Type: text/x-patch, Size: 3006 bytes --]
From 2704ba927c369d834d8b88adb136e323f3c2036d Mon Sep 17 00:00:00 2001
From: Tom de Vries <tdevries@suse.de>
Date: Thu, 5 Jan 2023 10:34:58 +0100
Subject: [PATCH] [gdb/python] Avoid queue.SimpleQueue for python 3.6
On openSUSE Leap 15.4 with python 3.6, the gdb.dap/basic-dap.exp test-case
fails as follows:
...
ERROR: eof reading json header
while executing
"error "eof reading json header""
invoked from within
"expect {
-i exp19 -timeout 10
-re "^Content-Length: (\[0-9\]+)\r\n" {
set length $expect_out(1,string)
exp_continue
}
-re "^(\[^\r\n\]+)..."
("uplevel" body line 1)
invoked from within
"uplevel $body" NONE eof reading json header
UNRESOLVED: gdb.dap/basic-dap.exp: startup - initialize
...
Investigation using a "catch throw" shows that:
...
(gdb)
at gdb/python/py-utils.c:396
396 error (_("Error occurred in Python: %s"), msg.get ());
(gdb) p msg.get ()
$1 = 0x2b91d10 "module 'queue' has no attribute 'SimpleQueue'"
...
The python class queue.SimpleQueue was introduced in python 3.7.
Fix this by falling back to queue.Queue for python <= 3.6.
Tested on x86_64-linux, by successfully running the test-case:
...
# of expected passes 47
...
---
gdb/python/lib/gdb/dap/server.py | 6 +++++-
gdb/python/lib/gdb/dap/startup.py | 6 +++++-
2 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/gdb/python/lib/gdb/dap/server.py b/gdb/python/lib/gdb/dap/server.py
index d6fc0bd5754..f8cb6170a96 100644
--- a/gdb/python/lib/gdb/dap/server.py
+++ b/gdb/python/lib/gdb/dap/server.py
@@ -15,6 +15,7 @@
import json
import queue
+import sys
from .io import start_json_writer, read_json
from .startup import (
@@ -47,7 +48,10 @@ class Server:
# This queue accepts JSON objects that are then sent to the
# DAP client. Writing is done in a separate thread to avoid
# blocking the read loop.
- self.write_queue = queue.SimpleQueue()
+ if sys.version_info[0] == 3 and sys.version_info[1] <= 6:
+ self.write_queue = queue.Queue()
+ else:
+ self.write_queue = queue.SimpleQueue()
self.done = False
global _server
_server = self
diff --git a/gdb/python/lib/gdb/dap/startup.py b/gdb/python/lib/gdb/dap/startup.py
index acfdcb4d81b..523705a5933 100644
--- a/gdb/python/lib/gdb/dap/startup.py
+++ b/gdb/python/lib/gdb/dap/startup.py
@@ -22,6 +22,7 @@ import signal
import threading
import traceback
from contextlib import contextmanager
+import sys
# The GDB thread, aka the main thread.
@@ -173,7 +174,10 @@ def send_gdb_with_response(fn):
"""
if isinstance(fn, str):
fn = Invoker(fn)
- result_q = queue.SimpleQueue()
+ if sys.version_info[0] == 3 and sys.version_info[1] <= 6:
+ result_q = queue.Queue()
+ else:
+ result_q = queue.SimpleQueue()
def message():
try:
base-commit: b26c8438c71d44427fc9c7ef6fa2ab1742d220a9
--
2.35.3
next prev parent reply other threads:[~2023-01-05 9:49 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-09-01 16:30 [PATCH] Initial implementation of Debugger Adapter Protocol Tom Tromey
2022-09-01 16:38 ` Eli Zaretskii
2022-09-12 19:54 ` Tom Tromey
2022-09-13 2:26 ` Eli Zaretskii
2022-10-06 14:27 ` Tom Tromey
2023-01-02 16:54 ` Tom Tromey
2023-01-03 8:04 ` Tom de Vries
2023-01-03 14:14 ` Tom Tromey
2023-01-04 11:59 ` Tom de Vries
2023-01-04 12:27 ` Tom de Vries
2023-01-05 9:49 ` Tom de Vries [this message]
2023-01-05 15:19 ` [PATCH] [gdb/python] Avoid queue.SimpleQueue for python 3.6 Tom Tromey
2023-01-05 16:34 ` Tom de Vries
2023-01-05 17:07 ` Tom Tromey
2023-01-05 11:35 ` [PATCH] Initial implementation of Debugger Adapter Protocol Tom de Vries
2023-01-05 15:24 ` Tom Tromey
2023-01-05 16:17 ` Tom de Vries
2023-01-06 14:12 ` Tom de Vries
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=a4acfae5-f73a-5db8-909e-28ec15a2acb3@suse.de \
--to=tdevries@suse.de \
--cc=gdb-patches@sourceware.org \
--cc=tromey@adacore.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).