Crash in running do_postgres specs #5

Closed
dbussink opened this Issue May 25, 2009 · 4 comments

Comments

Projects
None yet
2 participants
@dbussink
Owner

dbussink commented May 25, 2009

I get a BusError when running the do_postgres specs. The backtrace from gdb is the following:

http://gist.github.com/117746

If there is any more information I can provide, just give me a ping

@dbussink

This comment has been minimized.

Show comment Hide comment
@dbussink

dbussink May 26, 2009

Owner

Reproducing this assumes that you've cloned both rubinius and the do repository: github.com/datamapper/do. After this I assume both are cloned in the same directory. I only seem to be able to reproduce this using PostgreSQL, so that needs to be installed too (available through an installer / macports etc). It assumes that there is a postgres admin user that has full access without a password. The following command runs rubinius and gives an error:

gdb --args ../../rubinius/vm/vm -I"../../rubinius/gems/1.8/gems/rspec-1.2.2/lib" "../../rubinius/gems/1.8/gems/rspec-1.2.2/bin/spec" "spec/command_spec.rb" "spec/connection_spec.rb" "spec/encoding_spec.rb" "spec/reader_spec.rb" "spec/result_spec.rb" "spec/typecast/array_spec.rb" "spec/typecast/bigdecimal_spec.rb" "spec/typecast/boolean_spec.rb" "spec/typecast/byte_array_spec.rb" "spec/typecast/class_spec.rb" "spec/typecast/date_spec.rb" "spec/typecast/datetime_spec.rb" "spec/typecast/float_spec.rb" "spec/typecast/integer_spec.rb" "spec/typecast/nil_spec.rb" "spec/typecast/range_spec.rb" "spec/typecast/string_spec.rb" "spec/typecast/time_spec.rb" --options spec/spec.opts

This gives the following backtrace for me:

http://gist.github.com/118220

Owner

dbussink commented May 26, 2009

Reproducing this assumes that you've cloned both rubinius and the do repository: github.com/datamapper/do. After this I assume both are cloned in the same directory. I only seem to be able to reproduce this using PostgreSQL, so that needs to be installed too (available through an installer / macports etc). It assumes that there is a postgres admin user that has full access without a password. The following command runs rubinius and gives an error:

gdb --args ../../rubinius/vm/vm -I"../../rubinius/gems/1.8/gems/rspec-1.2.2/lib" "../../rubinius/gems/1.8/gems/rspec-1.2.2/bin/spec" "spec/command_spec.rb" "spec/connection_spec.rb" "spec/encoding_spec.rb" "spec/reader_spec.rb" "spec/result_spec.rb" "spec/typecast/array_spec.rb" "spec/typecast/bigdecimal_spec.rb" "spec/typecast/boolean_spec.rb" "spec/typecast/byte_array_spec.rb" "spec/typecast/class_spec.rb" "spec/typecast/date_spec.rb" "spec/typecast/datetime_spec.rb" "spec/typecast/float_spec.rb" "spec/typecast/integer_spec.rb" "spec/typecast/nil_spec.rb" "spec/typecast/range_spec.rb" "spec/typecast/string_spec.rb" "spec/typecast/time_spec.rb" --options spec/spec.opts

This gives the following backtrace for me:

http://gist.github.com/118220

@dbussink

This comment has been minimized.

Show comment Hide comment
@dbussink

dbussink May 26, 2009

Owner

Btw, this needs rspec 1.2.2 (1.2.6 acts weird with rubinius), extlib and the addressable gems installed. I've also updated Rubygems using ./bin/rbx -S gem update --system

Owner

dbussink commented May 26, 2009

Btw, this needs rspec 1.2.2 (1.2.6 acts weird with rubinius), extlib and the addressable gems installed. I've also updated Rubygems using ./bin/rbx -S gem update --system

@evanphx

This comment has been minimized.

Show comment Hide comment
@evanphx

evanphx May 27, 2009

Owner

Please retry against 319665d. There were some structures used by capi that weren't properly initialized.

Owner

evanphx commented May 27, 2009

Please retry against 319665d. There were some structures used by capi that weren't properly initialized.

@dbussink

This comment has been minimized.

Show comment Hide comment
@dbussink

dbussink Jun 19, 2009

Owner

This has been fixed since

Owner

dbussink commented Jun 19, 2009

This has been fixed since

dbussink added a commit that referenced this issue Jul 8, 2013

Guard memory allocations for JIT memory with spinlock
This fixes a crash issue where the JIT was running independent from the
GC and the GC was deallocating JIT memory at the same time. We don't
want to make the whole JIT generation GC dependent, since that causes
performance issues, so we guard all memory allocations here with a
spinlock.

The crash would be exposed with these backtraces where things were
modified concurrently:

Thread 6 (process 70553):
 #0  rubinius::jit::FreeRangeHeader::AddToFreeList () at /Users/dirkjan/Code/rubinius/vm/llvm/jit_memory_manager.hpp:151
 #1  0x000000010989f037 in rubinius::jit::MemoryRangeHeader::TrimAllocationToSize (this=0x10f7ec688, FreeList=0x10f7ec688, NewSize=5064) at vm/llvm/jit_memory_manager.cpp:211
 #2  0x000000010989bb75 in rubinius::jit::RubiniusRequestJITMemoryManager::endFunctionBody (this=<value temporarily unavailable, due to optimizations>, F=<value temporarily unavailable, due to optimizations>, FunctionStart=<value temporarily unavailable, due to optimizations>, FunctionEnd=0x13c8 <Address 0x13c8 out of bounds>) at jit_memory_manager.hpp:317
 #3  0x0000000109b4f852 in (anonymous namespace)::JITEmitter::finishFunction ()
 #4  0x0000000109946106 in (anonymous namespace)::Emitter<llvm::JITCodeEmitter>::runOnMachineFunction ()
 #5  0x0000000109bbbc30 in llvm::MachineFunctionPass::runOnFunction ()
 #6  0x0000000109f1beb2 in llvm::FPPassManager::runOnFunction ()
 #7  0x0000000109f1b9f9 in llvm::FunctionPassManagerImpl::run ()
 #8  0x0000000109f1b8a1 in llvm::FunctionPassManager::run ()
 #9  0x0000000109b461ab in llvm::JIT::runJITOnFunctionUnlocked ()
 #10 0x0000000109b46148 in llvm::JIT::runJITOnFunction ()
 #11 0x0000000109898fcc in rubinius::jit::Compiler::generate_function (this=0x10d485d38, indy=true) at vm/llvm/jit_compiler.cpp:118
 #12 0x00000001098ada93 in rubinius::BackgroundCompilerThread::perform (this=0x7fce81633240) at vm/llvm/state.cpp:345
 #13 0x00000001098ad4ef in rubinius::utilities::thread::Thread::delete_on_exit () at /Users/dirkjan/Code/rubinius/vm/util/thread.hpp:79
 #14 0x00000001098ad4ef in rubinius::utilities::thread::Thread::trampoline (arg=0x7fce81633240) at thread.hpp:211
 #15 0x00007fff8e73c7a2 in _pthread_start ()
 #16 0x00007fff8e7291e1 in thread_start ()

Thread 5 (process 70553):
 #0  0x00007fff952b5386 in __semwait_signal ()
 #1  0x00007fff8e7c6800 in nanosleep ()
 #2  0x00007fff8e7c668a in sleep ()
 #3  0x000000010969c9dd in rubinius::segv_handler (sig=11) at vm/environment.cpp:211
 #4  <signal handler called>
 #5  rubinius::jit::FreeRangeHeader::AddToFreeList () at /Users/dirkjan/Code/rubinius/vm/llvm/jit_memory_manager.hpp:151
 #6  0x000000010989ee53 in rubinius::jit::MemoryRangeHeader::FreeBlock (this=0x10f7c88f0, FreeList=<value temporarily unavailable, due to optimizations>) at jit_memory_manager.hpp:155
 #7  0x00000001098ac3e7 in rubinius::LLVMState::remove (this=<value temporarily unavailable, due to optimizations>, func=<value temporarily unavailable, due to optimizations>) at jit_memory_manager.hpp:426
 #8  0x000000010983dde9 in rubinius::CodeManager::sweep (this=0x7fce8180a2d8) at vm/gc/code_manager.cpp:107
 #9  0x0000000109750e7e in rubinius::ObjectMemory::mark () at /Users/dirkjan/Code/rubinius/vm/objectmemory.hpp:634
 #10 0x0000000109750e7e in rubinius::ObjectMemory::collect_mature_finish (this=0x7fce8180a200, state=0x10c94fec8, data=0x7fce8528b220) at vm/objectmemory.cpp:636
 #11 0x0000000109843d8a in rubinius::State::memory () at /Users/dirkjan/Code/rubinius/vm/state.hpp:171
 #12 0x0000000109843d8a in rubinius::ImmixMarker::perform (this=0x7fce8163a720, state=0x10c94fec8) at vm/gc/immix_marker.cpp:172
 #13 0x0000000109843b71 in rubinius::immix_marker_tramp (state=0x10f7ec688) at vm/gc/immix_marker.cpp:18
 #14 0x00000001098094c0 in rubinius::Thread::in_new_thread (ptr=0x7fce86a23e70) at vm/builtin/thread.cpp:250
 #15 0x00007fff8e73c7a2 in _pthread_start ()
 #16 0x00007fff8e7291e1 in thread_start ()

This issue was closed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment