These are true PyCFunctions, after adding the second argument to oss_self, no need to cast.
diff --git a/Modules/ossaudiodev.c b/Modules/ossaudiodev.c
index 0a70c20..e660e50 100644
--- a/Modules/ossaudiodev.c
+++ b/Modules/ossaudiodev.c
@@ -470,7 +470,7 @@
 }
 
 static PyObject *
-oss_self(PyObject *self)
+oss_self(PyObject *self, PyObject *unused)
 {
     Py_INCREF(self);
     return self;
@@ -800,8 +800,8 @@
     { "flush",          (PyCFunction)oss_sync, METH_VARARGS },
 
     /* Support for the context manager protocol */
-    { "__enter__",      (PyCFunction)oss_self, METH_NOARGS },
-    { "__exit__",       (PyCFunction)oss_exit, METH_VARARGS },
+    { "__enter__",      oss_self, METH_NOARGS },
+    { "__exit__",       oss_exit, METH_VARARGS },
 
     { NULL,             NULL}           /* sentinel */
 };
@@ -812,8 +812,8 @@
     { "fileno",         (PyCFunction)oss_mixer_fileno, METH_NOARGS },
 
     /* Support for the context manager protocol */
-    { "__enter__",      (PyCFunction)oss_self, METH_NOARGS },
-    { "__exit__",       (PyCFunction)oss_exit, METH_VARARGS },
+    { "__enter__",      oss_self, METH_NOARGS },
+    { "__exit__",       oss_exit, METH_VARARGS },
 
     /* Simple ioctl wrappers */
     { "controls",       (PyCFunction)oss_mixer_controls, METH_VARARGS },