Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
* [PATCH 1/1] gdb, python: update threads in Inferior.threads ()
@ 2012-07-24  8:12 markus.t.metzger
  2012-07-24 14:36 ` Phil Muldoon
  0 siblings, 1 reply; 21+ messages in thread
From: markus.t.metzger @ 2012-07-24  8:12 UTC (permalink / raw)
  To: gdb-patches
  Cc: markus.t.metzger, jan.kratochvil, palves, tromey, 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-24 Markus Metzger <markus.t.metzger@intel.com>

gdb/python/
	* py-inferior.c (infpy_threads): Call update_thread_list ().

gdb/testsuite/gdb.python/
	* py-threads.c: New file.
	* py-threads.exp: New file.


---
 gdb/python/py-inferior.c                |    5 +++
 gdb/testsuite/gdb.python/py-threads.c   |   59 +++++++++++++++++++++++++++++++
 gdb/testsuite/gdb.python/py-threads.exp |   30 ++++++++++++++++
 3 files changed, 94 insertions(+), 0 deletions(-)
 create mode 100644 gdb/testsuite/gdb.python/py-threads.c
 create mode 100644 gdb/testsuite/gdb.python/py-threads.exp

diff --git a/gdb/python/py-inferior.c b/gdb/python/py-inferior.c
index 2b229be..22adf8c 100644
--- a/gdb/python/py-inferior.c
+++ b/gdb/python/py-inferior.c
@@ -300,6 +300,11 @@ infpy_threads (PyObject *self, PyObject *args)
   struct threadlist_entry *entry;
   inferior_object *inf_obj = (inferior_object *) self;
   PyObject *tuple;
+  volatile struct gdb_exception except;
+
+  TRY_CATCH (except, RETURN_MASK_ALL)
+    update_thread_list ();
+  GDB_PY_HANDLE_EXCEPTION (except);
 
   INFPY_REQUIRE_VALID (inf_obj);
 
diff --git a/gdb/testsuite/gdb.python/py-threads.c b/gdb/testsuite/gdb.python/py-threads.c
new file mode 100644
index 0000000..23eadb5
--- /dev/null
+++ b/gdb/testsuite/gdb.python/py-threads.c
@@ -0,0 +1,59 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2012 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see  <http://www.gnu.org/licenses/>.
+*/
+
+#include <pthread.h>
+
+#define NUMTH 8
+
+static void *
+thread (void *param)
+{
+  pthread_barrier_t *barrier = (pthread_barrier_t *) param;
+
+  pthread_barrier_wait (barrier);
+
+  return param;
+}
+
+static void
+check (pthread_barrier_t *barrier)
+{
+  pthread_barrier_wait (barrier);
+}
+
+extern int
+main (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 (&barrier);
+
+  for (i = 0; i < NUMTH; ++i)
+    pthread_join (threads[i], NULL);
+
+  pthread_barrier_destroy (&barrier);
+
+  return 0;
+}
diff --git a/gdb/testsuite/gdb.python/py-threads.exp b/gdb/testsuite/gdb.python/py-threads.exp
new file mode 100644
index 0000000..9459c00
--- /dev/null
+++ b/gdb/testsuite/gdb.python/py-threads.exp
@@ -0,0 +1,30 @@
+# Copyright (C) 2012 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+standard_testfile
+
+if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
+    return -1
+}
+clean_restart $testfile
+
+if { [skip_python_tests] } { continue }
+
+if ![runto check] {
+	untested "py-threads"
+	return -1
+}
+
+gdb_test "python print len(gdb.selected_inferior().threads())" "\r\n9" "py-threads"
-- 
1.7.1


^ permalink raw reply	[flat|nested] 21+ messages in thread
* [PATCH 1/1] gdb, python: update threads in Inferior.threads ()
@ 2012-07-26 12:20 markus.t.metzger
  0 siblings, 0 replies; 21+ 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] 21+ messages in thread
* [PATCH 1/1] gdb, python: update threads in Inferior.threads ()
@ 2012-07-25  8:27 markus.t.metzger
  2012-07-25 16:15 ` Tom Tromey
  0 siblings, 1 reply; 21+ messages in thread
From: markus.t.metzger @ 2012-07-25  8:27 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-25 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.


---
 gdb/python/py-inferior.c                 |    5 +++
 gdb/testsuite/gdb.python/py-inferior.c   |   41 ++++++++++++++++++++++++++++++
 gdb/testsuite/gdb.python/py-inferior.exp |   13 +++++++--
 3 files changed, 56 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..b351f3e 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,15 @@ 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.
+
+runto check_threads
+gdb_test "python print len (i0.threads ())" "\r\n9" "test Inferior.threads 2"
+
+# Proceed to the next test.
+
+runto [gdb_get_line_number "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] 21+ messages in thread
* [PATCH 1/1] gdb, python: update threads in Inferior.threads ()
@ 2012-07-19 15:30 markus.t.metzger
  2012-07-19 18:41 ` Jan Kratochvil
  0 siblings, 1 reply; 21+ messages in thread
From: markus.t.metzger @ 2012-07-19 15:30 UTC (permalink / raw)
  To: gdb-patches
  Cc: markus.t.metzger, jan.kratochvil, palves, tromey, 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-19 Markus Metzger <markus.t.metzger@intel.com>

gdb/python/
	* py-inferior.c (infpy_threads): Call update_thread_list ().

gdb/testsuite/gdb.python/
	* py-threads.c: New file.
	* py-threads.exp: New file.


---
 gdb/python/py-inferior.c                |    5 +++
 gdb/testsuite/gdb.python/py-threads.c   |   51 +++++++++++++++++++++++++++++++
 gdb/testsuite/gdb.python/py-threads.exp |   30 ++++++++++++++++++
 3 files changed, 86 insertions(+), 0 deletions(-)
 create mode 100644 gdb/testsuite/gdb.python/py-threads.c
 create mode 100644 gdb/testsuite/gdb.python/py-threads.exp

diff --git a/gdb/python/py-inferior.c b/gdb/python/py-inferior.c
index 2b229be..22adf8c 100644
--- a/gdb/python/py-inferior.c
+++ b/gdb/python/py-inferior.c
@@ -300,6 +300,11 @@ infpy_threads (PyObject *self, PyObject *args)
   struct threadlist_entry *entry;
   inferior_object *inf_obj = (inferior_object *) self;
   PyObject *tuple;
+  volatile struct gdb_exception except;
+
+  TRY_CATCH (except, RETURN_MASK_ALL)
+    update_thread_list ();
+  GDB_PY_HANDLE_EXCEPTION (except);
 
   INFPY_REQUIRE_VALID (inf_obj);
 
diff --git a/gdb/testsuite/gdb.python/py-threads.c b/gdb/testsuite/gdb.python/py-threads.c
new file mode 100644
index 0000000..bb08979
--- /dev/null
+++ b/gdb/testsuite/gdb.python/py-threads.c
@@ -0,0 +1,51 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2012 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see  <http://www.gnu.org/licenses/>.
+*/
+
+#include <pthread.h>
+
+#define NUMTH 8
+
+static void *
+thread (void *param)
+{
+  for (;;)
+    ;
+  return param;
+}
+
+static void
+check (void)
+{
+}
+
+extern int
+main (void)
+{
+  pthread_t threads[NUMTH];
+  int i;
+
+  for (i = 0; i < NUMTH; ++i)
+    pthread_create (&threads[i], NULL, thread, NULL);
+
+  check ();
+
+  for (i = 0; i < NUMTH; ++i)
+    pthread_join (threads[i], NULL);
+
+  return 0;
+}
diff --git a/gdb/testsuite/gdb.python/py-threads.exp b/gdb/testsuite/gdb.python/py-threads.exp
new file mode 100644
index 0000000..ab2bccb
--- /dev/null
+++ b/gdb/testsuite/gdb.python/py-threads.exp
@@ -0,0 +1,30 @@
+# Copyright (C) 2012 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+standard_testfile
+
+if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
+    return -1
+}
+clean_restart $testfile
+
+if { [skip_python_tests] } { continue }
+
+if ![runto check] {
+	untested "py-threads"
+	return -1
+}
+
+gdb_test "python print len(gdb.selected_inferior().threads())" "9" "py-threads"
-- 
1.7.1


^ permalink raw reply	[flat|nested] 21+ messages in thread
* [PATCH 1/1] gdb, python: update threads in Inferior.threads ()
@ 2012-07-06  9:50 markus.t.metzger
  2012-07-06 18:12 ` Tom Tromey
  2012-07-18 13:54 ` Jan Kratochvil
  0 siblings, 2 replies; 21+ messages in thread
From: markus.t.metzger @ 2012-07-06  9:50 UTC (permalink / raw)
  To: gdb-patches; +Cc: markus.t.metzger, 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.

Not sure this is the right place. We should probably update the thread list as
soon as we learn that the target stopped.

2012-07-06 Markus Metzger <markus.t.metzger@intel.com>

gdb/python/
	* py-inferior.c (infpy_threads): Call update_thread_list ().


---
 gdb/python/py-inferior.c |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/gdb/python/py-inferior.c b/gdb/python/py-inferior.c
index 2b229be..ef28c33 100644
--- a/gdb/python/py-inferior.c
+++ b/gdb/python/py-inferior.c
@@ -303,6 +303,8 @@ infpy_threads (PyObject *self, PyObject *args)
 
   INFPY_REQUIRE_VALID (inf_obj);
 
+  update_thread_list ();
+
   tuple = PyTuple_New (inf_obj->nthreads);
   if (!tuple)
     return NULL;
-- 
1.7.1


^ permalink raw reply	[flat|nested] 21+ messages in thread

end of thread, other threads:[~2012-07-26 12:20 UTC | newest]

Thread overview: 21+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-07-24  8:12 [PATCH 1/1] gdb, python: update threads in Inferior.threads () markus.t.metzger
2012-07-24 14:36 ` Phil Muldoon
  -- strict thread matches above, loose matches on Subject: below --
2012-07-26 12:20 markus.t.metzger
2012-07-25  8:27 markus.t.metzger
2012-07-25 16:15 ` Tom Tromey
2012-07-26  7:51   ` Metzger, Markus T
2012-07-26  8:43     ` Jan Kratochvil
2012-07-26  8:49       ` Metzger, Markus T
2012-07-19 15:30 markus.t.metzger
2012-07-19 18:41 ` Jan Kratochvil
     [not found]   ` <2832024D-3061-4A13-BBF5-656C504C295D@gmail.com>
2012-07-24  8:08     ` Metzger, Markus T
2012-07-25 16:13       ` Tom Tromey
2012-07-26  5:51         ` Metzger, Markus T
2012-07-25 16:16   ` Tom Tromey
2012-07-06  9:50 markus.t.metzger
2012-07-06 18:12 ` Tom Tromey
2012-07-19 15:27   ` Metzger, Markus T
2012-07-18 13:54 ` Jan Kratochvil
2012-07-19 15:27   ` Metzger, Markus T
2012-07-19 18:45     ` Jan Kratochvil
2012-07-20  7:57       ` 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