Skip to content

Segfault/SIGSEGV when calling a PL/SQL procedure with ruby-plsql #62

@mike-bourgeous

Description

@mike-bourgeous

Possibly related to issue #61

Sometimes when I use the ruby-plsql gem to call a particular PL/SQL procedure, I get the following segfault in OCI8 (edited for relevance):

/home/username/.rvm/gems/ruby-2.1.1@gemset_name/gems/ruby-oci8-2.1.7/lib/oci8/cursor.rb:205: [BUG] Segmentation fault at 0x00000000000000
ruby 2.1.1p76 (2014-02-24 revision 45161) [x86_64-linux]

-- Control frame information -----------------------------------------------
c:0038 p:---- s:0148 e:000147 CFUNC  :get
c:0037 p:---- s:0146 e:000145 CFUNC  :get_data
c:0036 p:0027 s:0143 e:000142 METHOD /home/username/.rvm/gems/ruby-2.1.1@gemset_name/gems/ruby-oci8-2.1.7/lib/oci8/cursor.rb:205
c:0035 p:0014 s:0138 e:000136 METHOD /home/username/.rvm/gems/ruby-2.1.1@gemset_name/gems/ruby-plsql-0.5.0/lib/plsql/oci_connection.rb:101
c:0034 p:0204 s:0133 e:000132 METHOD /home/username/.rvm/gems/ruby-2.1.1@gemset_name/gems/ruby-plsql-0.5.0/lib/plsql/procedure_call.rb:498
c:0033 p:0016 s:0125 e:000124 METHOD /home/username/.rvm/gems/ruby-2.1.1@gemset_name/gems/ruby-plsql-0.5.0/lib/plsql/procedure_call.rb:466
c:0032 p:0014 s:0121 e:000117 BLOCK  /home/username/.rvm/gems/ruby-2.1.1@gemset_name/gems/ruby-plsql-0.5.0/lib/plsql/procedure_call.rb:452 [FINISH]
c:0031 p:---- s:0115 e:000114 CFUNC  :each
c:0030 p:0083 s:0112 e:000111 METHOD /home/username/.rvm/gems/ruby-2.1.1@gemset_name/gems/ruby-plsql-0.5.0/lib/plsql/procedure_call.rb:451
c:0029 p:0070 s:0108 e:000107 METHOD /home/username/.rvm/gems/ruby-2.1.1@gemset_name/gems/ruby-plsql-0.5.0/lib/plsql/procedure_call.rb:35
c:0028 p:0026 s:0105 e:000104 METHOD /home/username/.rvm/gems/ruby-2.1.1@gemset_name/gems/ruby-plsql-0.5.0/lib/plsql/procedure.rb:252
c:0027 p:0208 s:0099 e:000098 METHOD /home/username/.rvm/gems/ruby-2.1.1@gemset_name/gems/ruby-plsql-0.5.0/lib/plsql/package.rb:52
c:0026 p:0012 s:0091 e:000090 BLOCK  /home/username/devel/application/lib/application/oracle/module_name.rb:37

-- Ruby level backtrace information ----------------------------------------
/home/username/devel/application/lib/application/oracle/module_name.rb:37:in `block in apply_module_name'
/home/username/.rvm/gems/ruby-2.1.1@gemset_name/gems/ruby-plsql-0.5.0/lib/plsql/package.rb:52:in `method_missing'
/home/username/.rvm/gems/ruby-2.1.1@gemset_name/gems/ruby-plsql-0.5.0/lib/plsql/procedure.rb:252:in `exec'
/home/username/.rvm/gems/ruby-2.1.1@gemset_name/gems/ruby-plsql-0.5.0/lib/plsql/procedure_call.rb:35:in `exec'
/home/username/.rvm/gems/ruby-2.1.1@gemset_name/gems/ruby-plsql-0.5.0/lib/plsql/procedure_call.rb:451:in `get_return_value'
/home/username/.rvm/gems/ruby-2.1.1@gemset_name/gems/ruby-plsql-0.5.0/lib/plsql/procedure_call.rb:451:in `each'
/home/username/.rvm/gems/ruby-2.1.1@gemset_name/gems/ruby-plsql-0.5.0/lib/plsql/procedure_call.rb:452:in `block in get_return_value'
/home/username/.rvm/gems/ruby-2.1.1@gemset_name/gems/ruby-plsql-0.5.0/lib/plsql/procedure_call.rb:466:in `out_variable_value'
/home/username/.rvm/gems/ruby-2.1.1@gemset_name/gems/ruby-plsql-0.5.0/lib/plsql/procedure_call.rb:498:in `return_variable_value'
/home/username/.rvm/gems/ruby-2.1.1@gemset_name/gems/ruby-plsql-0.5.0/lib/plsql/oci_connection.rb:101:in `[]'
/home/username/.rvm/gems/ruby-2.1.1@gemset_name/gems/ruby-oci8-2.1.7/lib/oci8/cursor.rb:205:in `[]'
/home/username/.rvm/gems/ruby-2.1.1@gemset_name/gems/ruby-oci8-2.1.7/lib/oci8/cursor.rb:205:in `get_data'
/home/username/.rvm/gems/ruby-2.1.1@gemset_name/gems/ruby-oci8-2.1.7/lib/oci8/cursor.rb:205:in `get'

-- C level backtrace information -------------------------------------------
Segmentation fault

The PL/SQL method signature looks like this, and typically returns NULL in errbuf and retcode:

   PROCEDURE apply (p_id      IN NUMBER,
                    p_val1    IN VARCHAR2,
                    p_val2    IN VARCHAR2,
                    p_amount  IN NUMBER,
                    errbuf    OUT NOCOPY VARCHAR2,
                    retcode   OUT NOCOPY VARCHAR2);

I call the procedure like this:

plsql.package_name.apply(12345678, 'abcdefgh', 'ijklmnop', 0)
# => {:errbuf => nil, :retcode => nil}

I'm not sure what exactly the ruby-plsql gem does from there.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions