Oolite 1.91.0.7564-231127-4fd18a8-linux-test-x86_64 freezes with a bad savegame/oxp

For discussion of ports to POSIX based systems, especially using GNUStep.

Moderators: another_commander, winston, Getafix

Post Reply
User avatar
hiran
Theorethicist
Posts: 2056
Joined: Fri Mar 26, 2021 1:39 pm
Location: a parallel world I created for myself. Some call it a singularity...

Oolite 1.91.0.7564-231127-4fd18a8-linux-test-x86_64 freezes with a bad savegame/oxp

Post by hiran »

When trying to load a savegame (I just moved the cursor over it's name) Oolite froze. Would it be possible to add some safety to expansion loading to prevent this?

I have one OXP - based on Andromeda but the model is replaced by the NASA's ISS. This is what I see on the console:

Code: Select all

$ GNUstep/Applications/Oolite/oolite
AL lib: (WW) alc_initconfig: Failed to initialize backend "pulse"
Cannot connect to server socket err = No such file or directory
Cannot connect to server request channel
jack server is not running or cannot be started
JackShmReadWritePtr::~JackShmReadWritePtr - Init not done for -1, skipping unlock
JackShmReadWritePtr::~JackShmReadWritePtr - Init not done for -1, skipping unlock
Cannot connect to server socket err = No such file or directory
Cannot connect to server request channel
jack server is not running or cannot be started
JackShmReadWritePtr::~JackShmReadWritePtr - Init not done for -1, skipping unlock
JackShmReadWritePtr::~JackShmReadWritePtr - Init not done for -1, skipping unlock
This is what I see in the logfile:

Code: Select all

Opening log for Oolite version 1.91 (x86-64 test release) under Linux 6.2.0-37-generic at 2023-11-27 21:57:53 +0100.
Intel(R) Core(TM) i7-9700K CPU @ 3.60GHz 8 processors detected. System RAM: 32006 MB (free: 8572 MB).
Build options: OpenAL, GLSL shaders, new planets, JavaScript console support, OXP verifier, localization tools, debug GraphViz support, JavaScript profiling.

Note that the contents of the log file can be adjusted by editing logcontrol.plist.

21:57:53.862 [process.args]: Startup command: ./oolite.app/oolite 
21:57:54.249 [display.mode.list.native]: X11 native resolution detected: 3840 x 1080
21:57:54.390 [joystick.init]: Number of joysticks detected: 0
21:57:54.391 [rendering.opengl.version]: OpenGL renderer version: 4.6.0 ("4.6.0 NVIDIA 525.147.05"). Vendor: "NVIDIA Corporation". Renderer: "NVIDIA GeForce GTX 750 Ti/PCIe/SSE2".
21:57:54.391 [rendering.opengl.extensions]: OpenGL extensions (357):
GL_ARB_shader_objects, GL_NV_geometry_shader4, GL_ARB_shading_language_include, GL_EXT_draw_buffers2, GL_NV_pixel_data_range, GL_NVX_gpu_memory_info, GL_NV_register_combiners2, GL_ARB_fragment_program, GL_NV_vertex_program3, GL_ARB_polygon_offset_clamp, GL_ARB_texture_gather, GL_ARB_texture_filter_anisotropic, GL_NV_shader_atomic_int64, GL_ARB_texture_rectangle, GL_ARB_multi_bind, GL_NV_bindless_multi_draw_indirect_count, GL_NV_timeline_semaphore, GL_EXT_texture_mirror_clamp, GL_NV_gpu_program4_1, GL_ARB_texture_rgb10_a2ui, GL_ARB_seamless_cube_map, GL_ARB_multitexture, GL_ARB_vertex_buffer_object, GL_ARB_texture_barrier, GL_IBM_texture_mirrored_repeat, GL_EXT_texture_cube_map, GL_ARB_texture_cube_map_array, GL_ARB_enhanced_layouts, GL_ARB_shader_image_load_store, GL_EXT_framebuffer_blit, GL_ARB_texture_multisample, GL_NV_gpu_program_fp64, GL_NV_gpu_program5_mem_extended, GL_ARB_fragment_shader, GL_EXT_texture_compression_rgtc, GL_ARB_shader_precision, GL_EXT_blend_subtract, GL_EXT_texture3D, GL_EXT_bindable_uniform, GL_ARB_ES2_compatibility, GL_ARB_texture_float, GL_ARB_draw_instanced, GL_NV_texture_rectangle_compressed, GL_ARB_texture_buffer_object_rgb32, GL_NV_transform_feedback2, GL_EXT_packed_depth_stencil, GL_NV_command_list, GL_NV_explicit_multisample, GL_NV_texgen_reflection, GL_NV_primitive_restart, GL_ARB_depth_clamp, GL_ARB_shading_language_packing, GL_AMD_multi_draw_indirect, GL_ARB_texture_stencil8, GL_EXT_texture_edge_clamp, GL_ARB_explicit_uniform_location, GL_KHR_context_flush_control, GL_ARB_occlusion_query2, GL_NV_conditional_render, GL_ARB_vertex_type_10f_11f_11f_rev, GL_KHR_shader_subgroup, GL_EXT_framebuffer_multisample_blit_scaled, GL_EXT_texture_sRGB_R8, GL_ARB_texture_query_levels, GL_KHR_debug, GL_ARB_shader_clock, GL_EXT_polygon_offset_clamp, GL_EXT_Cg_shader, GL_NV_query_resource_tag, GL_NV_vdpau_interop, GL_ARB_debug_output, GL_ARB_sample_shading, GL_EXT_provoking_vertex, GL_EXT_blend_minmax, GL_ARB_vertex_attrib_binding, GL_NV_point_sprite, GL_EXT_blend_equation_separate, GL_EXT_shadow_funcs, GL_ARB_draw_buffers, GL_ARB_uniform_buffer_object, GL_ARB_robust_buffer_access_behavior, GL_NV_float_buffer, GL_ATI_texture_mirror_once, GL_KHR_blend_equation_advanced, GL_NV_ES3_1_compatibility, GL_NV_draw_texture, GL_ARB_shading_language_100, GL_NV_gpu_shader5, GL_ARB_seamless_cubemap_per_texture, GL_ARB_pixel_buffer_object, GL_SGIS_generate_mipmap, GL_NV_uniform_buffer_std430_layout, GL_ARB_direct_state_access, GL_ARB_vertex_array_bgra, GL_ARB_ES3_compatibility, GL_EXT_blend_color, GL_KHR_blend_equation_advanced_coherent, GL_ARB_stencil_texturing, GL_ARB_parallel_shader_compile, GL_ARB_multisample, GL_EXT_multiview_timer_query, GL_ARB_compute_shader, GL_NV_feature_query, GL_EXT_texture_sRGB, GL_EXT_memory_object_fd, GL_EXT_window_rectangles, GL_ARB_transform_feedback2, GL_NV_register_combiners, GL_ARB_texture_compression_bptc, GL_ARB_texture_border_clamp, GL_NV_texture_env_combine4, GL_ARB_shader_draw_parameters, GL_ARB_shader_ballot, GL_ARB_imaging, GL_EXT_blend_func_separate, GL_ARB_copy_image, GL_ARB_vertex_attrib_64bit, GL_ARB_multi_draw_indirect, GL_ARB_depth_buffer_float, GL_ARB_texture_buffer_object, GL_ARB_sampler_objects, GL_NV_copy_image, GL_ARB_conditional_render_inverted, GL_ARB_blend_func_extended, GL_EXT_shader_image_load_formatted, GL_ARB_timer_query, GL_EXT_gpu_shader4, GL_EXT_vertex_array_bgra, GL_EXT_texture_swizzle, GL_ARB_query_buffer_object, GL_ARB_arrays_of_arrays, GL_NV_gpu_multicast, GL_ARB_texture_env_combine, GL_NV_shader_thread_shuffle, GL_EXT_bgra, GL_ARB_transpose_matrix, GL_NV_query_resource, GL_EXT_fog_coord, GL_EXT_depth_bounds_test, GL_NV_fragment_program_option, GL_EXT_framebuffer_multisample, GL_ARB_transform_feedback3, GL_NV_blend_equation_advanced_coherent, GL_SUN_slice_accum, GL_ARB_base_instance, GL_NV_fragment_program, GL_ARB_ES3_1_compatibility, GL_ARB_transform_feedback_instanced, GL_EXT_x11_sync_object, GL_NV_draw_vulkan_image, GL_ARB_vertex_program, GL_ATI_draw_buffers, GL_NV_vertex_array_range2, GL_ARB_invalidate_subdata, GL_NVX_nvenc_interop, GL_KHR_parallel_shader_compile, GL_EXT_texture_storage, GL_EXT_shader_integer_mix, GL_NV_framebuffer_multisample_coverage, GL_ARB_sync, GL_NV_vertex_program, GL_EXT_compiled_vertex_array, GL_ARB_program_interface_query, GL_ARB_shader_storage_buffer_object, GL_NV_path_rendering, GL_EXT_multiview_texture_multisample, GL_ARB_vertex_type_2_10_10_10_rev, GL_ARB_get_texture_sub_image, GL_ARB_indirect_parameters, GL_NV_transform_feedback, GL_EXT_secondary_color, GL_ARB_texture_buffer_range, GL_ARB_texture_storage, GL_NV_packed_depth_stencil, GL_NV_blend_minmax_factor, GL_NV_internalformat_sample_query, GL_NV_blend_equation_advanced, GL_ARB_shader_atomic_counter_ops, GL_KHR_no_error, GL_ARB_shader_texture_lod, GL_ARB_clear_buffer_object, GL_EXT_packed_float, GL_NV_fog_distance, GL_NV_ES1_1_compatibility, GL_EXT_texture_object, GL_SGIX_depth_texture, GL_EXT_texture_integer, GL_EXT_multi_draw_arrays, GL_ARB_spirv_extensions, GL_ARB_half_float_vertex, GL_NV_blend_square, GL_EXT_gpu_program_parameters, GL_ARB_texture_env_dot3, GL_NVX_conditional_render, GL_EXT_texture_shared_exponent, GL_NV_shader_buffer_load, GL_NV_compute_program5, GL_EXT_packed_pixels, GL_ARB_framebuffer_no_attachments, GL_EXT_texture_lod_bias, GL_ARB_ES3_2_compatibility, GL_ARB_window_pos, GL_NV_multisample_coverage, GL_NV_copy_depth_to_color, GL_ARB_buffer_storage, GL_NV_shader_storage_buffer_object, GL_ARB_occlusion_query, GL_EXT_import_sync_object, GL_ARB_draw_elements_base_vertex, GL_EXT_draw_range_elements, GL_ARB_texture_non_power_of_two, GL_ARB_gpu_shader_fp64, GL_NV_half_float, GL_EXT_texture_env_dot3, GL_EXT_texture_buffer_object, GL_NV_light_max_exponent, GL_EXT_texture_compression_dxt1, GL_ARB_derivative_control, GL_NV_texture_barrier, GL_ARB_texture_mirrored_repeat, GL_ARB_vertex_array_object, GL_EXT_semaphore_fd, GL_EXT_texture_lod, GL_EXT_vertex_array, GL_NV_fence, GL_NV_multisample_filter_hint, GL_ARB_sparse_buffer, GL_KTX_buffer_region, GL_ARB_geometry_shader4, GL_ARB_fragment_program_shadow, GL_KHR_robust_buffer_access_behavior, GL_EXT_pixel_buffer_object, GL_NV_depth_buffer_float, GL_NV_bindless_multi_draw_indirect, GL_EXT_direct_state_access, GL_NV_texture_shader2, GL_ARB_texture_cube_map, GL_ARB_map_buffer_range, GL_NV_texture_compression_vtc, GL_ARB_gpu_shader5, GL_EXT_texture_compression_latc, GL_ARB_texture_storage_multisample, GL_EXT_transform_feedback2, GL_ARB_tessellation_shader, GL_ARB_point_parameters, GL_ARB_fragment_layer_viewport, GL_EXT_geometry_shader4, GL_ARB_shader_subroutine, GL_EXT_texture_shadow_lod, GL_EXT_separate_shader_objects, GL_ARB_texture_mirror_clamp_to_edge, GL_ARB_conservative_depth, GL_NV_uniform_buffer_unified_memory, GL_EXT_vertex_attrib_64bit, GL_NVX_progress_fence, GL_NV_vdpau_interop2, GL_EXTX_framebuffer_mixed_formats, GL_EXT_texture_env_add, GL_ARB_framebuffer_sRGB, GL_EXT_draw_instanced, GL_EXT_separate_specular_color, GL_ARB_pipeline_statistics_query, GL_NV_texture_rectangle, GL_EXT_point_parameters, GL_ARB_shader_bit_encoding, GL_ARB_sparse_texture, GL_NV_texture_shader3, GL_NV_occlusion_query, GL_EXT_texture_sRGB_decode, GL_EXT_texture_env_combine, GL_ARB_texture_compression, GL_S3_s3tc, GL_NV_vertex_array_range, GL_EXT_framebuffer_sRGB, GL_ARB_texture_env_add, GL_EXT_timer_query, GL_EXT_framebuffer_object, GL_OVR_multiview, GL_NV_bindless_texture, GL_EXT_stencil_two_side, GL_ARB_transform_feedback_overflow_query, GL_ARB_clip_control, GL_NV_depth_clamp, GL_ARB_gpu_shader_int64, GL_ARB_draw_buffers_blend, GL_NV_fragment_program2, GL_NV_shader_thread_group, GL_ARB_compressed_texture_pixel_storage, GL_EXT_stencil_wrap, GL_ATI_texture_float, GL_ARB_texture_query_lod, GL_ARB_compatibility, GL_ARB_texture_swizzle, GL_ARB_shader_texture_image_samples, GL_ARB_provoking_vertex, GL_ARB_internalformat_query2, GL_EXT_texture_array, GL_NV_alpha_to_coverage_dither_control, GL_ARB_shadow, GL_ARB_get_program_binary, GL_EXT_memory_object, GL_ARB_texture_env_crossbar, GL_ARB_texture_view, GL_OVR_multiview2, GL_NV_vertex_attrib_integer_64bit, GL_EXT_rescale_normal, GL_ARB_shading_language_420pack, GL_AMD_seamless_cubemap_per_texture, GL_NV_gpu_program4, GL_NV_shader_atomic_counters, GL_EXT_texture_compression_s3tc, GL_ARB_texture_compression_rgtc, GL_ARB_separate_shader_objects, GL_NV_vertex_program1_1, GL_NV_vertex_program2_option, GL_IBM_rasterpos_clip, GL_NV_shader_atomic_float, GL_ARB_gl_spirv, GL_NV_robustness_video_memory_purge, GL_ARB_depth_texture, GL_EXT_texture_filter_anisotropic, GL_ARB_explicit_attrib_location, GL_ARB_shader_image_size, GL_ARB_robustness, GL_ARB_compute_variable_group_size, GL_NV_parameter_buffer_object2, GL_ARB_draw_indirect, GL_NV_texture_shader, GL_ARB_copy_buffer, GL_EXT_semaphore, GL_ARB_color_buffer_float, GL_ARB_viewport_array, GL_ARB_half_float_pixel, GL_EXT_shader_image_load_store, GL_ARB_shader_group_vote, GL_SGIS_texture_lod, GL_NV_parameter_buffer_object, GL_NV_gpu_program5, GL_ARB_shader_atomic_counters, GL_ARB_cull_distance, GL_ARB_clear_texture, GL_SGIX_shadow, GL_NV_texture_multisample, GL_ARB_map_buffer_alignment, GL_NV_shader_subgroup_partitioned, GL_NV_vertex_program2, GL_ARB_internalformat_query, GL_ARB_texture_rg, GL_ARB_point_sprite, GL_ARB_fragment_coord_conventions, GL_NV_vertex_buffer_unified_memory, GL_KHR_robustness, GL_ARB_framebuffer_object, GL_ARB_vertex_shader, GL_ARB_instanced_arrays, GL_EXT_abgr, GL_ARB_bindless_texture
21:57:54.393 [rendering.opengl.shader.support]: Shaders are supported.
21:57:54.407 [searchPaths.dumpAll]: Resource paths: 
    ~/GNUstep/Applications/Oolite/oolite.app/Resources
    AddOns
    AddOns/Basic-debug.oxp
    AddOns/ISS.oxp
21:57:54.409 [MSAA.setup]: Multisample anti-aliasing not requested.
21:57:54.535 [shipData.load.begin]: Loading ship data.
21:57:54.691 [script.javascript.init]: JavaScript reset successful.
21:57:54.764 [debugTCP.disconnect]: No connection to debug console: "Connection to debug console failed: 'Connection refused' (outStream status: 7, inStream status: 7)."
21:57:54.764 [debugTCP.send.warning]: Error sending packet header, retrying.
21:57:54.788 [debugTCP.send.error]: The following packet could not be sent: {"Oolite version" = "1.91"; "packet type" = "Request Connection"; "protocol version" = 65792; }
21:57:54.789 [debugTCP.disconnect]: No connection to debug console: "Connection to debug console failed: 'bad stream.' (outStream status: 0, inStream status: 0)."
21:57:54.789 [debugTCP.connect.failed]: Failed to connect to debug console at address 127.0.0.1:8563.
21:57:54.813 [startup.complete]: ========== Loading complete in 0.95 seconds. ==========
21:58:17.977 [exception]: ***** Exception checking controls [pollDemoControls]: NSInternalInconsistencyException : NSIncrementExtraRefCount() asked to increment too far for <GSCBufferString: 0x556932e6cf80> - // Converted by Obj2DatTexNorm.py Wavefront OBJ file conversion script
// (c) 2005-2013 By Giles Williams and Jens Ayton
// 
// original file: "ISS_2016.obj"
// 
// model size: 3161.661 x 4268.025 x 1028.400
// 
// materials used: []
// 
NVERTS 4587925
NFACES 2338765

VERTEX
-37.02855 776.83929 231.96397
-37.02862 775.33685 231.34164
...
Sunshine - Moonlight - Good Times - Oolite
User avatar
hiran
Theorethicist
Posts: 2056
Joined: Fri Mar 26, 2021 1:39 pm
Location: a parallel world I created for myself. Some call it a singularity...

Re: Oolite 1.91.0.7564-231127-4fd18a8-linux-test-x86_64 freezes with a bad savegame/oxp

Post by hiran »

Noone with any idea?

I believe my model simply has too many vertexes and faces. After all the log contains

Code: Select all

Exception checking controls [pollDemoControls]: NSInternalInconsistencyException : NSIncrementExtraRefCount() asked to increment too far
and indeed I can see stuff iike

Code: Select all

NVERTS 4587925
NFACES 2338765
So I have two questions:
- what is the limit for models in Oolite? How many vertexes and how many faces?
- where in the code is this parsing performed? When the parser goes over the first two lines it should know what is coming and could bail out with a good error message directly. Java exceptions come with a stack trace...
Sunshine - Moonlight - Good Times - Oolite
User avatar
phkb
Impressively Grand Sub-Admiral
Impressively Grand Sub-Admiral
Posts: 4644
Joined: Tue Jan 21, 2014 10:37 pm
Location: Writing more OXPs, because the world needs more OXPs.

Re: Oolite 1.91.0.7564-231127-4fd18a8-linux-test-x86_64 freezes with a bad savegame/oxp

Post by phkb »

hiran wrote: Sat Dec 02, 2023 6:31 pm
where in the code is this parsing performed?
I *think* (and don't quote me on this!) models are parsed in the "OOMesh.m" file. But how it works is above my paygrade at the moment.
another_commander
Quite Grand Sub-Admiral
Quite Grand Sub-Admiral
Posts: 6552
Joined: Wed Feb 28, 2007 7:54 am

Re: Oolite 1.91.0.7564-231127-4fd18a8-linux-test-x86_64 freezes with a bad savegame/oxp

Post by another_commander »

Model parsing is indeed in OOMesh.m and the only limit is the computer's memory.

In any case I think the model verts and faces thing is a red herring. The error originates from an Obj-C exception thrown during the execution of pollDemoConyrols. Looks like a buffer overrun and the verts etc looks like a symptom of that.

I would recommend this approach:
- Reproduce reliably, find a minimal way that crashes it every time.
- Build a debug executable of the game.
- Run the oolite executable through gdb. Get it to crash in the debugger.
- Get backtrace from gdb, hope that it contains useful data. Ideally it will contain the location of the code just before the crash.
- If no useful info, then do it the very hard way with printf statements starting from pollDemoControls and working it down from there.
User avatar
hiran
Theorethicist
Posts: 2056
Joined: Fri Mar 26, 2021 1:39 pm
Location: a parallel world I created for myself. Some call it a singularity...

Re: Oolite 1.91.0.7564-231127-4fd18a8-linux-test-x86_64 freezes with a bad savegame/oxp

Post by hiran »

I tried to make the exception stack trace visible. For that I found the code that prints the exception so far and added one more.
https://github.com/OoliteProject/oolite ... ols.m#L711

As a result the Windows builds failed and the Linux "nightly"/development build gave me one more line in the logs when crashing:

Code: Select all

[exception]: ("./oolite.app/oolite(+0x2d7943) [0x55cd8f8a5943]", "./oolite.app/oolite(+0x52f99f) [0x55cd8fafd99f]", "./oolite.app/oolite(+0x4e45cb) [0x55cd8fab25cb]", "./oolite.app/oolite(+0x4e3751) [0x55cd8fab1751]", "/lib/libgnustep-base.so.1.28(+0x351359) [0x7efcc0351359]", "/lib/libgnustep-base.so.1.28(+0x31bded) [0x7efcc031bded]", "/lib/libgnustep-base.so.1.28(+0x319b1d) [0x7efcc0319b1d]", "/lib/libgnustep-base.so.1.28(+0x3197d4) [0x7efcc03197d4]", "/lib/libgnustep-base.so.1.28(+0x317b19) [0x7efcc0317b19]", "./oolite.app/oolite(main+0x1d5) [0x55cd8f8692f5]", "/lib/x86_64-linux-gnu/libc.so.6(+0x29d90) [0x7efcbe429d90]", "/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0x80) [0x7efcbe429e40]", "./oolite.app/oolite(_start+0x25) [0x55cd8f869415]")
Now I have no clue how to better interprete that line. Nor how to log a valid line that compiles in Windows. Not to talk about running gdb...
Sunshine - Moonlight - Good Times - Oolite
Post Reply