@@ -299,7 +299,6 @@ endsound_callback(int channel)
299
299
PyGILState_STATE gstate = PyGILState_Ensure ();
300
300
int channelnum ;
301
301
Mix_Chunk * sound = pgSound_AsChunk (channeldata [channel ].queue );
302
- Py_XDECREF (channeldata [channel ].sound );
303
302
channeldata [channel ].sound = channeldata [channel ].queue ;
304
303
channeldata [channel ].queue = NULL ;
305
304
PyGILState_Release (gstate );
@@ -310,7 +309,6 @@ endsound_callback(int channel)
310
309
}
311
310
else {
312
311
PyGILState_STATE gstate = PyGILState_Ensure ();
313
- Py_XDECREF (channeldata [channel ].sound );
314
312
channeldata [channel ].sound = NULL ;
315
313
PyGILState_Release (gstate );
316
314
Mix_GroupChannel (channel , -1 );
@@ -806,32 +804,46 @@ snd_get_raw(PyObject *self, PyObject *_null)
806
804
static PyObject *
807
805
snd_copy (PyObject * self , PyObject * _null )
808
806
{
807
+ PG_DECLARE_EXCEPTION_SAVER
809
808
MIXER_INIT_CHECK ();
810
809
811
810
pgSoundObject * newSound =
812
- (pgSoundObject * )pgSound_Type . tp_new (& pgSound_Type , NULL , NULL );
811
+ (pgSoundObject * )Py_TYPE ( self ) -> tp_new (& pgSound_Type , NULL , NULL );
813
812
814
813
PyObject * kwargs = PyDict_New ();
815
814
PyObject * key = PyUnicode_FromString ("buffer" );
816
815
PyObject * bytes = snd_get_raw (self , NULL );
816
+ if (bytes == NULL ) {
817
+ // exception set already by PyBytes_FromStringAndSize
818
+ PG_SAVE_EXCEPTION
819
+ Py_DECREF (key );
820
+ Py_DECREF (kwargs );
821
+ PG_UNSAVE_EXCEPTION
822
+ return NULL ;
823
+ }
824
+
817
825
if (PyDict_SetItem (kwargs , key , bytes ) < 0 ) {
818
826
// exception set already
827
+ PG_SAVE_EXCEPTION
819
828
Py_DECREF (key );
820
829
Py_DECREF (bytes );
821
830
Py_DECREF (kwargs );
831
+ PG_UNSAVE_EXCEPTION
822
832
return NULL ;
823
833
}
824
834
Py_DECREF (key );
825
835
Py_DECREF (bytes );
826
836
827
837
if (sound_init ((PyObject * )newSound , NULL , kwargs ) != 0 ) {
838
+ PG_SAVE_EXCEPTION
828
839
Py_DECREF (kwargs );
829
840
Py_DECREF (newSound );
830
- return RAISE (pgExc_SDLError , "Failed to initialize copied sound" );
841
+ PG_UNSAVE_EXCEPTION
842
+ // Exception set by sound_init
843
+ return NULL ;
831
844
}
832
845
833
846
Py_DECREF (kwargs );
834
- Py_INCREF (newSound );
835
847
return (PyObject * )newSound ;
836
848
}
837
849
0 commit comments