[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[pygame] Segmentation Fault
[I sent this mail early this morning but it seems to have gone missing]
Hi,
I was working on a game and used:
export set SDL_VIDEODRIVER=bobble
to see what would happen with an invalid driver name.
Bang! Turned out that the GP was triggered by this sequence:
C:>python
Python 2.3.5 (#62, Feb 8 2005, 16:23:02) [MSC v.1200 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import pygame
>>> pygame.init()
(5, 1)
>>> icon = pygame.image.load("icon32x32.png")
>>> pygame.display.set_icon(icon)
Fatal Python error: (pygame parachute) Segmentation Fault
abnormal program termination
C:>
I tracked it down to the fact that SDL_WM_SetIcon() was being called even
though SDL_Init(SDL_INIT_VIDEO) had failed.
Happens on Linux as well as Windows. Not particularly important, but it wasted
a chunk of my time.
Here's a diff against current CVS that also removes some redundancy,
cheers,
John Popplewell.
Index: display.c
===================================================================
RCS file: /home/cvspsrv/cvsroot/games/pygame/src/display.c,v
retrieving revision 1.64
diff -c -r1.64 display.c
*** display.c 3 Oct 2005 06:52:07 -0000 1.64
--- display.c 27 Oct 2005 02:08:59 -0000
***************
*** 919,925 ****
static void do_set_icon(PyObject *surface)
{
SDL_Surface* surf = PySurface_AsSurface(surface);
! surf = PySurface_AsSurface(surface);
SDL_WM_SetIcon(surf, NULL);
icon_was_set = 1;
}
--- 919,925 ----
static void do_set_icon(PyObject *surface)
{
SDL_Surface* surf = PySurface_AsSurface(surface);
!
SDL_WM_SetIcon(surf, NULL);
icon_was_set = 1;
}
***************
*** 930,935 ****
--- 930,937 ----
PyObject* surface;
if(!PyArg_ParseTuple(arg, "O!", &PySurface_Type, &surface))
return NULL;
+ if(!PyGame_Video_AutoInit())
+ return RAISE(PyExc_SDLError, SDL_GetError());
do_set_icon(surface);
RETURN_NONE
}