diff --git a/Doc/c-api/abstract.rst b/Doc/c-api/abstract.rst
index 1823f9d..f5df09f 100644
--- a/Doc/c-api/abstract.rst
+++ b/Doc/c-api/abstract.rst
@@ -24,4 +24,3 @@
    mapping.rst
    iter.rst
    buffer.rst
-   objbuffer.rst
diff --git a/Doc/c-api/objbuffer.rst b/Doc/c-api/objbuffer.rst
deleted file mode 100644
index 6b82a64..0000000
--- a/Doc/c-api/objbuffer.rst
+++ /dev/null
@@ -1,55 +0,0 @@
-.. highlight:: c
-
-Old Buffer Protocol
--------------------
-
-.. deprecated:: 3.0
-
-These functions were part of the "old buffer protocol" API in Python 2.
-In Python 3, this protocol doesn't exist anymore but the functions are still
-exposed to ease porting 2.x code.  They act as a compatibility wrapper
-around the :ref:`new buffer protocol <bufferobjects>`, but they don't give
-you control over the lifetime of the resources acquired when a buffer is
-exported.
-
-Therefore, it is recommended that you call :c:func:`PyObject_GetBuffer`
-(or the ``y*`` or ``w*`` :ref:`format codes <arg-parsing>` with the
-:c:func:`PyArg_ParseTuple` family of functions) to get a buffer view over
-an object, and :c:func:`PyBuffer_Release` when the buffer view can be released.
-
-
-.. c:function:: int PyObject_AsCharBuffer(PyObject *obj, const char **buffer, Py_ssize_t *buffer_len)
-
-   Returns a pointer to a read-only memory location usable as character-based
-   input.  The *obj* argument must support the single-segment character buffer
-   interface.  On success, returns ``0``, sets *buffer* to the memory location
-   and *buffer_len* to the buffer length.  Returns ``-1`` and sets a
-   :exc:`TypeError` on error.
-
-
-.. c:function:: int PyObject_AsReadBuffer(PyObject *obj, const void **buffer, Py_ssize_t *buffer_len)
-
-   Returns a pointer to a read-only memory location containing arbitrary data.
-   The *obj* argument must support the single-segment readable buffer
-   interface.  On success, returns ``0``, sets *buffer* to the memory location
-   and *buffer_len* to the buffer length.  Returns ``-1`` and sets a
-   :exc:`TypeError` on error.
-
-
-.. c:function:: int PyObject_CheckReadBuffer(PyObject *o)
-
-   Returns ``1`` if *o* supports the single-segment readable buffer interface.
-   Otherwise returns ``0``.  This function always succeeds.
-
-   Note that this function tries to get and release a buffer, and exceptions
-   which occur while calling corresponding functions will get suppressed.
-   To get error reporting use :c:func:`PyObject_GetBuffer()` instead.
-
-
-.. c:function:: int PyObject_AsWriteBuffer(PyObject *obj, void **buffer, Py_ssize_t *buffer_len)
-
-   Returns a pointer to a writable memory location.  The *obj* argument must
-   support the single-segment, character buffer interface.  On success,
-   returns ``0``, sets *buffer* to the memory location and *buffer_len* to the
-   buffer length.  Returns ``-1`` and sets a :exc:`TypeError` on error.
-
diff --git a/Doc/data/refcounts.dat b/Doc/data/refcounts.dat
index 4dacbe2..1215c96 100644
--- a/Doc/data/refcounts.dat
+++ b/Doc/data/refcounts.dat
@@ -1568,21 +1568,6 @@
 PyObject_ASCII:PyObject*::+1:
 PyObject_ASCII:PyObject*:o:0:
 
-PyObject_AsCharBuffer:int:::
-PyObject_AsCharBuffer:PyObject*:obj:0:
-PyObject_AsCharBuffer:const char**:buffer::
-PyObject_AsCharBuffer:Py_ssize_t*:buffer_len::
-
-PyObject_AsReadBuffer:int:::
-PyObject_AsReadBuffer:PyObject*:obj:0:
-PyObject_AsReadBuffer:const void**:buffer::
-PyObject_AsReadBuffer:Py_ssize_t*:buffer_len::
-
-PyObject_AsWriteBuffer:int:::
-PyObject_AsWriteBuffer:PyObject*:obj:0:
-PyObject_AsWriteBuffer:void**:buffer::
-PyObject_AsWriteBuffer:Py_ssize_t*:buffer_len::
-
 PyObject_Bytes:PyObject*::+1:
 PyObject_Bytes:PyObject*:o:0:
 
@@ -1618,9 +1603,6 @@
 PyObject_CheckBuffer:int:::
 PyObject_CheckBuffer:PyObject*:obj:0:
 
-PyObject_CheckReadBuffer:int:::
-PyObject_CheckReadBuffer:PyObject*:o:0:
-
 PyObject_DelAttr:int:::
 PyObject_DelAttr:PyObject*:o:0:
 PyObject_DelAttr:PyObject*:attr_name:0:
diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst
index 8995845..060d5de 100644
--- a/Doc/whatsnew/3.10.rst
+++ b/Doc/whatsnew/3.10.rst
@@ -204,3 +204,8 @@
 
 Removed
 -------
+
+* ``PyObject_AsCharBuffer()``, ``PyObject_AsReadBuffer()``, ``PyObject_CheckReadBuffer()``,
+  and ``PyObject_AsWriteBuffer()`` are removed. Please migrate to new buffer protocol;
+  :c:func:`PyObject_GetBuffer` and :c:func:`PyBuffer_Release`.
+  (Contributed by Inada Naoki in :issue:`41103`.
diff --git a/Include/abstract.h b/Include/abstract.h
index bb51c66..a23b7dc 100644
--- a/Include/abstract.h
+++ b/Include/abstract.h
@@ -309,53 +309,6 @@
 PyAPI_FUNC(int) PyObject_DelItem(PyObject *o, PyObject *key);
 
 
-/* === Old Buffer API ============================================ */
-
-/* FIXME:  usage of these should all be replaced in Python itself
-   but for backwards compatibility we will implement them.
-   Their usage without a corresponding "unlock" mechanism
-   may create issues (but they would already be there). */
-
-/* Takes an arbitrary object which must support the (character, single segment)
-   buffer interface and returns a pointer to a read-only memory location
-   useable as character based input for subsequent processing.
-
-   Return 0 on success.  buffer and buffer_len are only set in case no error
-   occurs. Otherwise, -1 is returned and an exception set. */
-Py_DEPRECATED(3.0)
-PyAPI_FUNC(int) PyObject_AsCharBuffer(PyObject *obj,
-                                      const char **buffer,
-                                      Py_ssize_t *buffer_len);
-
-/* Checks whether an arbitrary object supports the (character, single segment)
-   buffer interface.
-
-   Returns 1 on success, 0 on failure. */
-Py_DEPRECATED(3.0) PyAPI_FUNC(int) PyObject_CheckReadBuffer(PyObject *obj);
-
-/* Same as PyObject_AsCharBuffer() except that this API expects (readable,
-   single segment) buffer interface and returns a pointer to a read-only memory
-   location which can contain arbitrary data.
-
-   0 is returned on success.  buffer and buffer_len are only set in case no
-   error occurs.  Otherwise, -1 is returned and an exception set. */
-Py_DEPRECATED(3.0)
-PyAPI_FUNC(int) PyObject_AsReadBuffer(PyObject *obj,
-                                      const void **buffer,
-                                      Py_ssize_t *buffer_len);
-
-/* Takes an arbitrary object which must support the (writable, single segment)
-   buffer interface and returns a pointer to a writable memory location in
-   buffer of size 'buffer_len'.
-
-   Return 0 on success.  buffer and buffer_len are only set in case no error
-   occurs. Otherwise, -1 is returned and an exception set. */
-Py_DEPRECATED(3.0)
-PyAPI_FUNC(int) PyObject_AsWriteBuffer(PyObject *obj,
-                                       void **buffer,
-                                       Py_ssize_t *buffer_len);
-
-
 /* === New Buffer API ============================================ */
 
 /* Takes an arbitrary object and returns the result of calling
diff --git a/Misc/NEWS.d/next/C API/2020-06-24-22-57-07.bpo-41103.doojgE.rst b/Misc/NEWS.d/next/C API/2020-06-24-22-57-07.bpo-41103.doojgE.rst
new file mode 100644
index 0000000..082b77b
--- /dev/null
+++ b/Misc/NEWS.d/next/C API/2020-06-24-22-57-07.bpo-41103.doojgE.rst
@@ -0,0 +1,4 @@
+``PyObject_AsCharBuffer()``, ``PyObject_AsReadBuffer()``,
+``PyObject_CheckReadBuffer()``, and ``PyObject_AsWriteBuffer()`` are
+removed. Please migrate to new buffer protocol; :c:func:`PyObject_GetBuffer`
+and :c:func:`PyBuffer_Release`.
diff --git a/Objects/abstract.c b/Objects/abstract.c
index b9e7111..0d3f4ac 100644
--- a/Objects/abstract.c
+++ b/Objects/abstract.c
@@ -292,85 +292,6 @@
 }
 
 
-/* We release the buffer right after use of this function which could
-   cause issues later on.  Don't use these functions in new code.
- */
-int
-PyObject_CheckReadBuffer(PyObject *obj)
-{
-    PyBufferProcs *pb = Py_TYPE(obj)->tp_as_buffer;
-    Py_buffer view;
-
-    if (pb == NULL ||
-        pb->bf_getbuffer == NULL)
-        return 0;
-    if ((*pb->bf_getbuffer)(obj, &view, PyBUF_SIMPLE) == -1) {
-        PyErr_Clear();
-        return 0;
-    }
-    PyBuffer_Release(&view);
-    return 1;
-}
-
-static int
-as_read_buffer(PyObject *obj, const void **buffer, Py_ssize_t *buffer_len)
-{
-    Py_buffer view;
-
-    if (obj == NULL || buffer == NULL || buffer_len == NULL) {
-        null_error();
-        return -1;
-    }
-    if (PyObject_GetBuffer(obj, &view, PyBUF_SIMPLE) != 0)
-        return -1;
-
-    *buffer = view.buf;
-    *buffer_len = view.len;
-    PyBuffer_Release(&view);
-    return 0;
-}
-
-int
-PyObject_AsCharBuffer(PyObject *obj,
-                      const char **buffer,
-                      Py_ssize_t *buffer_len)
-{
-    return as_read_buffer(obj, (const void **)buffer, buffer_len);
-}
-
-int PyObject_AsReadBuffer(PyObject *obj,
-                          const void **buffer,
-                          Py_ssize_t *buffer_len)
-{
-    return as_read_buffer(obj, buffer, buffer_len);
-}
-
-int PyObject_AsWriteBuffer(PyObject *obj,
-                           void **buffer,
-                           Py_ssize_t *buffer_len)
-{
-    PyBufferProcs *pb;
-    Py_buffer view;
-
-    if (obj == NULL || buffer == NULL || buffer_len == NULL) {
-        null_error();
-        return -1;
-    }
-    pb = Py_TYPE(obj)->tp_as_buffer;
-    if (pb == NULL ||
-        pb->bf_getbuffer == NULL ||
-        ((*pb->bf_getbuffer)(obj, &view, PyBUF_WRITABLE) != 0)) {
-        PyErr_SetString(PyExc_TypeError,
-                        "expected a writable bytes-like object");
-        return -1;
-    }
-
-    *buffer = view.buf;
-    *buffer_len = view.len;
-    PyBuffer_Release(&view);
-    return 0;
-}
-
 /* Buffer C-API for Python 3.0 */
 
 int
diff --git a/PC/python3dll.c b/PC/python3dll.c
index 2f29e83..f72f2c8 100644
--- a/PC/python3dll.c
+++ b/PC/python3dll.c
@@ -392,11 +392,8 @@
 EXPORT_FUNC(PyNumber_ToBase)
 EXPORT_FUNC(PyNumber_TrueDivide)
 EXPORT_FUNC(PyNumber_Xor)
-EXPORT_FUNC(PyObject_AsCharBuffer)
 EXPORT_FUNC(PyObject_ASCII)
 EXPORT_FUNC(PyObject_AsFileDescriptor)
-EXPORT_FUNC(PyObject_AsReadBuffer)
-EXPORT_FUNC(PyObject_AsWriteBuffer)
 EXPORT_FUNC(PyObject_Bytes)
 EXPORT_FUNC(PyObject_Call)
 EXPORT_FUNC(PyObject_CallFunction)
@@ -405,7 +402,6 @@
 EXPORT_FUNC(PyObject_CallMethodObjArgs)
 EXPORT_FUNC(PyObject_CallObject)
 EXPORT_FUNC(PyObject_Calloc)
-EXPORT_FUNC(PyObject_CheckReadBuffer)
 EXPORT_FUNC(PyObject_ClearWeakRefs)
 EXPORT_FUNC(PyObject_DelItem)
 EXPORT_FUNC(PyObject_DelItemString)
