| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent bdcfe44 commit e376c47
3 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -289,15 +289,13 @@ destroy_codec_capsule(PyObject *capsule) | |||
| 289 | 289 | { | |
| 290 | 290 | void *ptr = PyCapsule_GetPointer(capsule, CODEC_CAPSULE); | |
| 291 | 291 | codec_capsule *data = (codec_capsule *)ptr; | |
| 292 | - fprintf(stderr, "uncapsulating %s\n", data->codec->encoding); | ||
| 293 | 292 | Py_DECREF(data->cjk_module); | |
| 294 | 293 | PyMem_Free(ptr); | |
| 295 | 294 | } | |
| 296 | 295 | ||
| 297 | 296 | static codec_capsule * | |
| 298 | 297 | capsulate_codec(PyObject *mod, const MultibyteCodec *codec) | |
| 299 | 298 | { | |
| 300 | - fprintf(stderr, "capsulating %s\n", codec->encoding); | ||
| 301 | 299 | codec_capsule *data = PyMem_Malloc(sizeof(codec_capsule)); | |
| 302 | 300 | if (data == NULL) { | |
| 303 | 301 | PyErr_NoMemory(); | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -720,9 +720,17 @@ static struct PyMethodDef multibytecodec_methods[] = { | |||
| 720 | 720 | }; | |
| 721 | 721 | ||
| 722 | 722 | static int | |
| 723 | - multibytecodec_traverse(PyObject *self, visitproc visit, void *arg) | ||
| 723 | + multibytecodec_clear(MultibyteCodecObject *self) | ||
| 724 | + { | ||
| 725 | + Py_CLEAR(self->cjk_module); | ||
| 726 | + return 0; | ||
| 727 | + } | ||
| 728 | + | ||
| 729 | + static int | ||
| 730 | + multibytecodec_traverse(MultibyteCodecObject *self, visitproc visit, void *arg) | ||
| 724 | 731 | { | |
| 725 | 732 | Py_VISIT(Py_TYPE(self)); | |
| 733 | + Py_VISIT(self->cjk_module); | ||
| 726 | 734 | return 0; | |
| 727 | 735 | } | |
| 728 | 736 | ||
@@ -731,6 +739,7 @@ multibytecodec_dealloc(MultibyteCodecObject *self) | |||
| 731 | 739 | { | |
| 732 | 740 | PyObject_GC_UnTrack(self); | |
| 733 | 741 | PyTypeObject *tp = Py_TYPE(self); | |
| 742 | + (void)multibytecodec_clear(self); | ||
| 734 | 743 | tp->tp_free(self); | |
| 735 | 744 | Py_DECREF(tp); | |
| 736 | 745 | } | |
@@ -740,6 +749,7 @@ static PyType_Slot multibytecodec_slots[] = { | |||
| 740 | 749 | {Py_tp_getattro, PyObject_GenericGetAttr}, | |
| 741 | 750 | {Py_tp_methods, multibytecodec_methods}, | |
| 742 | 751 | {Py_tp_traverse, multibytecodec_traverse}, | |
| 752 | + {Py_tp_clear, multibytecodec_clear}, | ||
| 743 | 753 | {0, NULL}, | |
| 744 | 754 | }; | |
| 745 | 755 | ||
@@ -1969,6 +1979,7 @@ _multibytecodec___create_codec(PyObject *module, PyObject *arg) | |||
| 1969 | 1979 | if (self == NULL) | |
| 1970 | 1980 | return NULL; | |
| 1971 | 1981 | self->codec = codec; | |
| 1982 | + self->cjk_module = Py_NewRef(data->cjk_module); | ||
| 1972 | 1983 | ||
| 1973 | 1984 | PyObject_GC_Track(self); | |
| 1974 | 1985 | return (PyObject *)self; | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -63,6 +63,7 @@ typedef struct { | |||
| 63 | 63 | typedef struct { | |
| 64 | 64 | PyObject_HEAD | |
| 65 | 65 | MultibyteCodec *codec; | |
| 66 | + PyObject *cjk_module; | ||
| 66 | 67 | } MultibyteCodecObject; | |
| 67 | 68 | ||
| 68 | 69 | #define MultibyteCodec_Check(state, op) Py_IS_TYPE((op), state->multibytecodec_type) | |
| Back | FazBrowse Home | New Git URL |
0 commit comments