ctypes memory leak

58 views
Skip to first unread message

greenmoss

unread,
Jan 14, 2012, 2:02:08 PM1/14/12
to pyglet-users
All,

I'm running my game code on pyglet 1.1.4, and am seeing what looks to
me like a memory leak. That is, while the code is executing the RSS
continually increases until eventually my laptop starts swapping and
eventually the code exits with a bus error.

I investigated with guppy: I did a heap dump once at startup, once
after the first slowdown due to running out of memory and hitting
swap, then once this is detected I exited pyglet and did one last heap
dump. I noticed that all three dumps showed approximately the same
heap size (approximately 18 MB), even though htop shows the code is
using gigabytes of memory.

From what I've read, these heap dumps only show python memory usage,
which means the rest of the memory would be occupied by C code. If my
understanding is correct, this would seem to indicate a memory leak in
the ctypes that pyglet is generating. My understanding of the
underlying code is hazy, so please feel free to correct any incorrect
terminology I may be using or any other errors in my understanding/
description.

Here was the Apple crash report when I encountered the bus error:
https://gist.github.com/1612500

Here is the code that contains the memory problem:
https://github.com/greenmoss/NotOrion/tarball/bus_error

I created a utility to automatically trigger the condition. To run it,
download/untar the above tarball, then cd to the "demo" directory,
then execute "./label_move.py". If you allow this utility to run
continually, it should replicate the behavior described above. If you
have a lot of free memory, it may take a while to use it all before it
hits swap.

Does anyone have any suggestions for getting past this problem?

Nathan

unread,
Jan 16, 2012, 10:51:11 PM1/16/12
to pyglet...@googlegroups.com

I'm not a pyglet dev, per se, but just for the record, what revision
of OS X are you on?

~ Nathan

greenmoss

unread,
Jan 17, 2012, 6:35:16 PM1/17/12
to pyglet-users
This is 10.6.8

Kurt Yoder

unread,
Jan 17, 2012, 10:03:44 AM1/17/12
to pyglet...@googlegroups.com

I'm on 10.6.8

greenmoss

unread,
Jan 24, 2012, 8:34:28 AM1/24/12
to pyglet-users
I just found out about pyglet/info.py, so here is its output:

Python
------------------------------------------------------------------------------
sys.version: 2.7.2 (default, Oct 2 2011, 15:29:02)
[GCC 4.2.1 (Apple Inc. build 5659)]
sys.platform: darwin
os.getcwd(): /

pyglet
------------------------------------------------------------------------------
pyglet.version: 1.1.4
pyglet.__file__: /opt/local/Library/Frameworks/Python.framework/
Versions/2.7/lib/python2.7/site-packages/pyglet/__init__.pyc
pyglet.options['debug_trace_depth'] = 1
pyglet.options['font'] = ('gdiplus', 'win32')
pyglet.options['xsync'] = True
pyglet.options['debug_trace_flush'] = True
pyglet.options['debug_win32'] = False
pyglet.options['debug_gl_trace'] = False
pyglet.options['debug_x11'] = False
pyglet.options['shadow_window'] = True
pyglet.options['debug_font'] = False
pyglet.options['debug_media'] = False
pyglet.options['debug_trace'] = False
pyglet.options['debug_lib'] = False
pyglet.options['graphics_vbo'] = True
pyglet.options['vsync'] = None
pyglet.options['debug_trace_args'] = False
pyglet.options['debug_gl'] = True
pyglet.options['debug_graphics_batch'] = False
pyglet.options['audio'] = ('directsound', 'openal', 'alsa', 'silent')
pyglet.options['debug_texture'] = False
pyglet.options['debug_gl_trace_args'] = False

pyglet.window
------------------------------------------------------------------------------
platform: <pyglet.window.carbon.CarbonPlatform object at 0x64d2f0>
display: <pyglet.window.carbon.CarbonDisplay object at 0x637810>
screens[0]: CarbonScreen(x=0, y=0, width=1440, height=900)
config['double_buffer'] = 1
config['stereo'] = 0
config['buffer_size'] = 32
config['aux_buffers'] = 0
config['sample_buffers'] = 0
config['samples'] = 0
config['red_size'] = 8
config['green_size'] = 8
config['blue_size'] = 8
config['alpha_size'] = 8
config['depth_size'] = 24
config['stencil_size'] = 0
config['accum_red_size'] = 0
config['accum_green_size'] = 0
config['accum_blue_size'] = 0
config['accum_alpha_size'] = 0
context: CarbonGLContext()

pyglet.gl.gl_info
------------------------------------------------------------------------------
gl_info.get_version(): 2.1 NVIDIA-1.6.36
gl_info.get_vendor(): NVIDIA Corporation
gl_info.get_renderer(): NVIDIA GeForce 9400M OpenGL Engine
gl_info.get_extensions():
GL_APPLE_aux_depth_stencil
GL_APPLE_client_storage
GL_APPLE_element_array
GL_APPLE_fence
GL_APPLE_float_pixels
GL_APPLE_flush_buffer_range
GL_APPLE_flush_render
GL_APPLE_object_purgeable
GL_APPLE_packed_pixels
GL_APPLE_pixel_buffer
GL_APPLE_rgb_422
GL_APPLE_specular_vector
GL_APPLE_texture_range
GL_APPLE_transform_hint
GL_APPLE_vertex_array_object
GL_APPLE_vertex_array_range
GL_APPLE_vertex_program_evaluators
GL_APPLE_ycbcr_422
GL_ARB_color_buffer_float
GL_ARB_depth_buffer_float
GL_ARB_depth_texture
GL_ARB_draw_buffers
GL_ARB_fragment_program
GL_ARB_fragment_program_shadow
GL_ARB_fragment_shader
GL_ARB_framebuffer_object
GL_ARB_half_float_pixel
GL_ARB_half_float_vertex
GL_ARB_imaging
GL_ARB_instanced_arrays
GL_ARB_multisample
GL_ARB_multitexture
GL_ARB_occlusion_query
GL_ARB_pixel_buffer_object
GL_ARB_point_parameters
GL_ARB_point_sprite
GL_ARB_shader_objects
GL_ARB_shader_texture_lod
GL_ARB_shading_language_100
GL_ARB_shadow
GL_ARB_texture_border_clamp
GL_ARB_texture_compression
GL_ARB_texture_compression_rgtc
GL_ARB_texture_cube_map
GL_ARB_texture_env_add
GL_ARB_texture_env_combine
GL_ARB_texture_env_crossbar
GL_ARB_texture_env_dot3
GL_ARB_texture_float
GL_ARB_texture_mirrored_repeat
GL_ARB_texture_non_power_of_two
GL_ARB_texture_rectangle
GL_ARB_texture_rg
GL_ARB_transpose_matrix
GL_ARB_vertex_blend
GL_ARB_vertex_buffer_object
GL_ARB_vertex_program
GL_ARB_vertex_shader
GL_ARB_window_pos
GL_ATI_separate_stencil
GL_ATI_texture_env_combine3
GL_ATI_texture_float
GL_ATI_texture_mirror_once
GL_EXT_abgr
GL_EXT_bgra
GL_EXT_bindable_uniform
GL_EXT_blend_color
GL_EXT_blend_equation_separate
GL_EXT_blend_func_separate
GL_EXT_blend_minmax
GL_EXT_blend_subtract
GL_EXT_clip_volume_hint
GL_EXT_compiled_vertex_array
GL_EXT_depth_bounds_test
GL_EXT_draw_buffers2
GL_EXT_draw_range_elements
GL_EXT_fog_coord
GL_EXT_framebuffer_blit
GL_EXT_framebuffer_multisample
GL_EXT_framebuffer_object
GL_EXT_framebuffer_sRGB
GL_EXT_geometry_shader4
GL_EXT_gpu_program_parameters
GL_EXT_gpu_shader4
GL_EXT_multi_draw_arrays
GL_EXT_packed_depth_stencil
GL_EXT_packed_float
GL_EXT_provoking_vertex
GL_EXT_rescale_normal
GL_EXT_secondary_color
GL_EXT_shadow_funcs
GL_EXT_stencil_two_side
GL_EXT_stencil_wrap
GL_EXT_texture_array
GL_EXT_texture_compression_dxt1
GL_EXT_texture_compression_s3tc
GL_EXT_texture_env_add
GL_EXT_texture_filter_anisotropic
GL_EXT_texture_integer
GL_EXT_texture_lod_bias
GL_EXT_texture_mirror_clamp
GL_EXT_texture_rectangle
GL_EXT_texture_sRGB
GL_EXT_texture_shared_exponent
GL_EXT_transform_feedback
GL_EXT_vertex_array_bgra
GL_IBM_rasterpos_clip
GL_NV_blend_square

GL_NV_conditional_render
GL_NV_depth_clamp
GL_NV_fog_distance
GL_NV_fragment_program2
GL_NV_fragment_program_option
GL_NV_light_max_exponent
GL_NV_multisample_filter_hint
GL_NV_point_sprite
GL_NV_texgen_reflection
GL_NV_vertex_program2_option
GL_NV_vertex_program3
GL_SGIS_generate_mipmap
GL_SGIS_texture_edge_clamp
GL_SGIS_texture_lod

pyglet.gl.glu_info
------------------------------------------------------------------------------
glu_info.get_version(): 1.3 MacOSX
glu_info.get_extensions():

pyglet.gl.glx_info
------------------------------------------------------------------------------
GLX not available.

pyglet.media
------------------------------------------------------------------------------
driver: pyglet.media.drivers.openal

pyglet.media.avbin
------------------------------------------------------------------------------
AVbin not available.

pyglet.media.drivers.openal
------------------------------------------------------------------------------
Library: <CDLL '/System/Library/Frameworks/OpenAL.framework/OpenAL',
handle 392100 at 12a1b670>
Version: (1, 1)
Extensions:
ALC_EXT_capture
ALC_ENUMERATION_EXT
ALC_EXT_MAC_OSX
ALC_EXT_ASA
ALC_EXT_ASA_DISTORTION
ALC_EXT_ASA_ROGER_BEEP
Reply all
Reply to author
Forward
0 new messages