mrkn / pycall.rb

Calling Python functions from the Ruby language
MIT License
1.05k stars 72 forks source link

Segmentation fault ( Pycall [BUG] Segmentation fault at 0x0000000000000010 ) #183

Closed mAreebAlam closed 1 month ago

mAreebAlam commented 1 month ago

there is problem in the method import_module of file "pycall-1.5.2/lib/pycall.rb"

def import_module(name) LibPython::Helpers.import_module(name) end

it calls a c method in this file "ext/pycall/pycall.c"

C language method

static VALUE pycall_libpython_helpers_m_import_module(int argc, VALUE argv, VALUE mod) { VALUE name, globals, locals, fromlist, level; char const name_cstr;

rb_scan_args(argc, argv, "14", &name, &globals, &locals, &fromlist, &level);

if (RB_TYPE_P(name, T_SYMBOL)) { name = rb_sym_to_s(name); }

name_cstr = StringValueCStr(name);

if (argc == 1) { return pycall_import_module(name_cstr); }

if (argc == 5) { level = rb_check_to_integer(level, "to_int"); } else { / TODO: set the default level to 0 / }

return pycall_import_module_level(name_cstr, globals, locals, fromlist, NUM2INT(level)); }

which again calls the previous method and the process continues in an infinite loop, hence segmentation fault occurs

snickell commented 1 month ago

I don't think there is a loop here, I have traced the code like this, I do not see any loops:

Are you using Rails or Puma? If so, PyCall is NOT safe to call from a web request, even if puma/rails has threads set to 1. Do you have threads in your application?

I suspect this might be the same issue as:

snickell commented 1 month ago

See: "is pycall thread safe": https://github.com/mrkn/pycall.rb/issues/96

mAreebAlam commented 1 month ago

Thanks for clarification I think you are right, the issue is due to puma

snickell commented 1 month ago

@mAreebAlam I'm working on an approach for working with Puma, let me know if you want me to ping you when its working