This is the mail archive of the gdb-cvs@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] Define unique_ptr specialization for Py_buffer.


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=26c897821b37af894088ec5731f93dc82e79b6d4

commit 26c897821b37af894088ec5731f93dc82e79b6d4
Author: Kevin Buettner <kevinb@redhat.com>
Date:   Sat Feb 16 17:33:47 2019 -0700

    Define unique_ptr specialization for Py_buffer.
    
    This patch causes PyBuffer_Release() to be called when the associated
    buffer goes out of scope.  I've been using it as follows:
    
     ...
     Py_buffer_up buffer_up;
     Py_buffer py_buf;
    
     if (PyObject_CheckBuffer (obj)
         && PyObject_GetBuffer (obj, &py_buf, PyBUF_SIMPLE) == 0)
       {
          /* Got a buffer, py_buf, out of obj.  Cause it to released
             when it goes out of scope.  */
         buffer_up.reset (&py_buf);
       }
       ...
    
    This snippet of code was taken directly from an upcoming patch to
    python-value.c.
    
    gdb/ChangeLog:
    
    	* python/python-internal.h (Py_buffer_deleter): New struct.
    	(Py_buffer_up): New typedef.

Diff:
---
 gdb/ChangeLog                |  5 +++++
 gdb/python/python-internal.h | 13 +++++++++++++
 2 files changed, 18 insertions(+)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 879ad6a..f311a24 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,8 @@
+2019-02-26  Kevin Buettner  <kevinb@redhat.com>
+
+	* python/python-internal.h (Py_buffer_deleter): New struct.
+	(Py_buffer_up): New typedef.
+
 2019-02-25  John Baldwin  <jhb@FreeBSD.org>
 
 	* dwarf2read.c (dwarf2_get_dwz_file): Reset dwz_bfd to nullptr
diff --git a/gdb/python/python-internal.h b/gdb/python/python-internal.h
index 3cb9ebc..d11af83 100644
--- a/gdb/python/python-internal.h
+++ b/gdb/python/python-internal.h
@@ -801,4 +801,17 @@ struct varobj;
 struct varobj_iter *py_varobj_get_iterator (struct varobj *var,
 					    PyObject *printer);
 
+/* Deleter for Py_buffer unique_ptr specialization.  */
+
+struct Py_buffer_deleter
+{
+  void operator() (Py_buffer *b) const
+  {
+    PyBuffer_Release (b);
+  }
+};
+
+/* A unique_ptr specialization for Py_buffer.  */
+typedef std::unique_ptr<Py_buffer, Py_buffer_deleter> Py_buffer_up;
+
 #endif /* PYTHON_PYTHON_INTERNAL_H */


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]