[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[pygame] BUG: Memoryleak in pygame.sprite.GroupSingle



Hello,

for me it seems that GroupSingle dosnt release references to the old
Sprite when a new Sprite is beeing assigned.

ive attached 2 Files.
pygame_memleak.py actually triggers the leak (Dont uncomment the sleep -
it will eat your memory instantly!).
In the second file pygame_memleak2.py i just changed GroupSingle to
Group and s.sprite = ... to s.empty(); s.add( ... ) to achieve the same
behaviour as GroupSingle - and this one works fine.


Im using: 
Python 2.6.6 (r266:84292, Sep 15 2010, 16:22:56) [GCC 4.4.5] (64-Bit)
Pygame 1.9.1release
(The default Ubuntu 10.10 setup -but ive seen this on older Versions of
Python aswell)
-- 
Conesoft / Brose - SteinrÃcken GbR

Ehm. Service4every1

Flemerskamp 19 a 44319 Dortmund

Telefon: +49 (0) 231 / 108722231*
Fax: +49 (0) 231 / 283798
E-Mail: t.steinruecken@xxxxxxxxxxxx

Gesellschaftsform: Gesellschaft bÃrgerlichen Rechts
Sitz: Dortmund
GeschÃftsfÃhrer: Roland Brose, Tobias SteinrÃcken
USt-IdNr.: DE237763154 

#!/usr/bin/python
# -*- coding: utf-8 -*-
import pygame
from random import randrange
from time import sleep

class mysprite(pygame.sprite.Sprite):
	def __init__(self, *args, **kwargs):
		pygame.sprite.Sprite.__init__(self, *args, **kwargs)
		self.image = pygame.Surface( (800, 600) )
		self.rect = self.image.get_rect()

pygame.init()
screen = pygame.display.set_mode( (800, 600) )
s = pygame.sprite.GroupSingle()
while 1:
	s.sprite = mysprite()
	s.update()
	s.draw( screen )
	pygame.display.flip()
	sleep(0.05)
#!/usr/bin/python
# -*- coding: utf-8 -*-
import pygame
from random import randrange
from time import sleep

class mysprite(pygame.sprite.Sprite):
	def __init__(self, *args, **kwargs):
		pygame.sprite.Sprite.__init__(self, *args, **kwargs)
		self.image = pygame.Surface( (800, 600) )
		self.rect = self.image.get_rect()

pygame.init()
screen = pygame.display.set_mode( (800, 600) )
s = pygame.sprite.Group()
while 1:
	s.empty()
	s.add( mysprite() )
	s.update()
	s.draw( screen )
	pygame.display.flip()
	sleep(0.05)