* [PATCH 1/1] gdb, python: update threads in Inferior.threads ()
@ 2012-07-26 12:20 markus.t.metzger
2012-07-26 19:10 ` [commit] " Jan Kratochvil
0 siblings, 1 reply; 3+ messages in thread
From: markus.t.metzger @ 2012-07-26 12:20 UTC (permalink / raw)
To: gdb-patches
Cc: markus.t.metzger, jan.kratochvil, palves, tromey, pmuldoon,
Markus Metzger
From: Markus Metzger <markus.t.metzger@intel.com>
When querying an inferior's threads in Python in a remote debugging
configuration, only the already known threads are returned.
Update the thread list in infpy_threads () before creating the Python objects.
2012-07-26 Markus Metzger <markus.t.metzger@intel.com>
* python/py-inferior.c (infpy_threads): Call update_thread_list ().
testsuite/
* gdb.python/py-inferior.c (thread): New function.
(check_threads): New function.
(test_threads): New function.
* gdb.python/py-inferior.exp: Added test.
Replaced runto with continue to breakpoint.
---
gdb/python/py-inferior.c | 5 +++
gdb/testsuite/gdb.python/py-inferior.c | 41 ++++++++++++++++++++++++++++++
gdb/testsuite/gdb.python/py-inferior.exp | 15 ++++++++--
3 files changed, 58 insertions(+), 3 deletions(-)
diff --git a/gdb/python/py-inferior.c b/gdb/python/py-inferior.c
index 2b229be..907b73e 100644
--- a/gdb/python/py-inferior.c
+++ b/gdb/python/py-inferior.c
@@ -300,9 +300,14 @@ infpy_threads (PyObject *self, PyObject *args)
struct threadlist_entry *entry;
inferior_object *inf_obj = (inferior_object *) self;
PyObject *tuple;
+ volatile struct gdb_exception except;
INFPY_REQUIRE_VALID (inf_obj);
+ TRY_CATCH (except, RETURN_MASK_ALL)
+ update_thread_list ();
+ GDB_PY_HANDLE_EXCEPTION (except);
+
tuple = PyTuple_New (inf_obj->nthreads);
if (!tuple)
return NULL;
diff --git a/gdb/testsuite/gdb.python/py-inferior.c b/gdb/testsuite/gdb.python/py-inferior.c
index 04ec476..3ee9a46 100644
--- a/gdb/testsuite/gdb.python/py-inferior.c
+++ b/gdb/testsuite/gdb.python/py-inferior.c
@@ -2,9 +2,11 @@
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
+#include <pthread.h>
#define CHUNK_SIZE 16000 /* same as findcmd.c's */
#define BUF_SIZE (2 * CHUNK_SIZE) /* at least two chunks */
+#define NUMTH 8
int8_t int8_search_buf[100];
int16_t int16_search_buf[100];
@@ -43,8 +45,47 @@ init_bufs ()
memset (search_buf, 'x', search_buf_size);
}
+static void *
+thread (void *param)
+{
+ pthread_barrier_t *barrier = (pthread_barrier_t *) param;
+
+ pthread_barrier_wait (barrier);
+
+ return param;
+}
+
+static void
+check_threads (pthread_barrier_t *barrier)
+{
+ pthread_barrier_wait (barrier);
+}
+
+extern int
+test_threads (void)
+{
+ pthread_t threads[NUMTH];
+ pthread_barrier_t barrier;
+ int i;
+
+ pthread_barrier_init (&barrier, NULL, NUMTH + 1);
+
+ for (i = 0; i < NUMTH; ++i)
+ pthread_create (&threads[i], NULL, thread, &barrier);
+
+ check_threads (&barrier);
+
+ for (i = 0; i < NUMTH; ++i)
+ pthread_join (threads[i], NULL);
+
+ pthread_barrier_destroy (&barrier);
+
+ return 0;
+}
+
int main (int argc, char *argv[])
{
+ test_threads ();
init_bufs ();
return f1 (1, 2);
diff --git a/gdb/testsuite/gdb.python/py-inferior.exp b/gdb/testsuite/gdb.python/py-inferior.exp
index b40a514..15e684a 100644
--- a/gdb/testsuite/gdb.python/py-inferior.exp
+++ b/gdb/testsuite/gdb.python/py-inferior.exp
@@ -20,7 +20,7 @@ load_lib gdb-python.exp
standard_testfile
-if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile}] } {
+if { [gdb_compile_pthreads ${srcdir}/${subdir}/${srcfile} ${binfile} executable {debug}] != "" } {
return -1
}
@@ -48,8 +48,6 @@ if ![runto_main] then {
return 0
}
-runto [gdb_get_line_number "Break here."]
-
# Test basic gdb.Inferior attributes and methods.
gdb_py_test_silent_cmd "python inferiors = gdb.inferiors ()" "get inferiors list" 1
@@ -62,6 +60,17 @@ gdb_test "python print 'result =', i0.pid" " = \[0-9\]+" "test Inferior.pid"
gdb_test "python print 'result =', i0.was_attached" " = False" "test Inferior.was_attached"
gdb_test "python print i0.threads ()" "\\(<gdb.InferiorThread object at 0x\[\[:xdigit:\]\]+>,\\)" "test Inferior.threads"
+# Test the number of inferior threads.
+
+gdb_breakpoint check_threads
+gdb_continue_to_breakpoint "cont to check_threads" ".*pthread_barrier_wait.*"
+gdb_test "python print len (i0.threads ())" "\r\n9" "test Inferior.threads 2"
+
+# Proceed to the next test.
+
+gdb_breakpoint [gdb_get_line_number "Break here."]
+gdb_continue_to_breakpoint "cont to Break here." ".*Break here\..*"
+
# Test memory read and write operations.
gdb_py_test_silent_cmd "python addr = gdb.selected_frame ().read_var ('str')" \
--
1.7.1
^ permalink raw reply [flat|nested] 3+ messages in thread* [commit] [PATCH 1/1] gdb, python: update threads in Inferior.threads ()
2012-07-26 12:20 [PATCH 1/1] gdb, python: update threads in Inferior.threads () markus.t.metzger
@ 2012-07-26 19:10 ` Jan Kratochvil
2012-07-27 7:10 ` Metzger, Markus T
0 siblings, 1 reply; 3+ messages in thread
From: Jan Kratochvil @ 2012-07-26 19:10 UTC (permalink / raw)
To: markus.t.metzger; +Cc: gdb-patches, markus.t.metzger, palves, tromey, pmuldoon
On Thu, 26 Jul 2012 14:19:40 +0200, markus.t.metzger@intel.com wrote:
> 2012-07-26 Markus Metzger <markus.t.metzger@intel.com>
>
> * python/py-inferior.c (infpy_threads): Call update_thread_list ().
>
> testsuite/
> * gdb.python/py-inferior.c (thread): New function.
> (check_threads): New function.
> (test_threads): New function.
> * gdb.python/py-inferior.exp: Added test.
> Replaced runto with continue to breakpoint.
As you do not have write-after-approval yet I have checked it in:
http://sourceware.org/ml/gdb-cvs/2012-07/msg00223.html
Thanks,
Jan
^ permalink raw reply [flat|nested] 3+ messages in thread
* RE: [commit] [PATCH 1/1] gdb, python: update threads in Inferior.threads ()
2012-07-26 19:10 ` [commit] " Jan Kratochvil
@ 2012-07-27 7:10 ` Metzger, Markus T
0 siblings, 0 replies; 3+ messages in thread
From: Metzger, Markus T @ 2012-07-27 7:10 UTC (permalink / raw)
To: Jan Kratochvil; +Cc: gdb-patches, markus.t.metzger, palves, tromey, pmuldoon
[-- Attachment #1.1: Type: text/plain, Size: 957 bytes --]
> -----Original Message-----
> From: Jan Kratochvil [mailto:jan.kratochvil@redhat.com]
> Sent: Thursday, July 26, 2012 9:10 PM
> To: Metzger, Markus T
> Cc: gdb-patches@sourceware.org; markus.t.metzger@gmail.com; palves@redhat.com; tromey@redhat.com;
> pmuldoon@redhat.com
> Subject: [commit] [PATCH 1/1] gdb, python: update threads in Inferior.threads ()
>
> On Thu, 26 Jul 2012 14:19:40 +0200, markus.t.metzger@intel.com wrote:
> > 2012-07-26 Markus Metzger <markus.t.metzger@intel.com>
> >
> > * python/py-inferior.c (infpy_threads): Call update_thread_list ().
> >
> > testsuite/
> > * gdb.python/py-inferior.c (thread): New function.
> > (check_threads): New function.
> > (test_threads): New function.
> > * gdb.python/py-inferior.exp: Added test.
> > Replaced runto with continue to breakpoint.
>
> As you do not have write-after-approval yet I have checked it in:
> http://sourceware.org/ml/gdb-cvs/2012-07/msg00223.html
Thanks.
Markus.
[-- Attachment #1.2: smime.p7s --]
[-- Type: application/pkcs7-signature, Size: 7228 bytes --]
[-- Attachment #2: Type: text/plain, Size: 350 bytes --]
Intel GmbH
Dornacher Strasse 1
85622 Feldkirchen/Muenchen, Deutschland
Sitz der Gesellschaft: Feldkirchen bei Muenchen
Geschaeftsfuehrer: Douglas Lusk, Peter Gleissner, Hannes Schwaderer, Christian Lamprechter
Registergericht: Muenchen HRB 47456
Ust.-IdNr./VAT Registration No.: DE129385895
Citibank Frankfurt a.M. (BLZ 502 109 00) 600119052
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2012-07-27 7:10 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-07-26 12:20 [PATCH 1/1] gdb, python: update threads in Inferior.threads () markus.t.metzger
2012-07-26 19:10 ` [commit] " Jan Kratochvil
2012-07-27 7:10 ` Metzger, Markus T
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox