airlift / aircompressor

A port of Snappy, LZO, LZ4, and Zstandard to Java
Apache License 2.0
566 stars 112 forks source link

SIG_BUS on SunOS pm1 5.10 Generic_150400-59 sun4v sparc sun4v #83

Closed zolyfarkas closed 5 years ago

zolyfarkas commented 6 years ago

This happened with aircompressor-0.9. is aircompressor not supported on 64 bit sparc platforms?

Here is the native stack:

----------------- lwp# 2 / thread# 2 -------------------- ffffffff7e7dccbc _lwp_kill (6, 0, ffffffff7e949968, ffffffffffffffff, ffffffff7e93e000, 0) + 8 ffffffff7e74c250 abort (1, 1d8, ffffffff7db9b1cc, 1f1ebc, 0, 0) + 118 ffffffff7db84a48 1cCosFabort6Fbv (1, 1, 4b318, ffffffff7e0dda20, 55902c, 4b000) + 58 ffffffff7ddfb2d4 1cHVMErrorOreport_and_die6Mv (1, ffffffff7e1eeb35, 100110800, ffffffff7db98100, ffffffff7e2d5a80, ffffffff7e2751c0) + 10ac ffffffff7db9574c JVM_handle_solaris_signal (a, ffffffff7affa2a0, ffffffff7dd7cff0, ffffffff7aff9b30, ffffffffffaaf928, ffffffff7aff9fc0) + c0c ffffffff7db8d364 signalHandler (a, ffffffff7affa2a0, ffffffff7aff9fc0, ffffffff7e94ec38, 1001042d0, 2) + 1c ffffffff7e7d8d6c __sighndlr (a, ffffffff7affa2a0, ffffffff7aff9fc0, ffffffff7db8d348, 0, 9) + c ffffffff7e7cc8d4 call_user_handler (ffffffff7e600a00, ffffffff7e600a00, ffffffff7aff9fc0, c, 0, 0) + 3e0 ffffffff7e7ccae0 sigacthandler (0, ffffffff7affa2a0, ffffffff7aff9fc0, ffffffff7e600a00, 0, ffffffff7e93e000) + 68 --- called from signal handler with signal 10 (SIGBUS) --- ffffffff7dd7cff0 Unsafe_GetInt (ffffffff7affc5e8, ffffffff7e26f240, ffffffff7affa510, 11, 100110800, 191800) + 174 ffffffff6bb450a0 sun/misc/Unsafe.getInt(Ljava/lang/Object;J)I [compiled] ffffffff6b007b18 io/airlift/compress/snappy/SnappyRawCompressor.compress(Ljava/lang/Object;JJLjava/lang/Object;JJ[S)I+462 ffffffff6b007b18 io/airlift/compress/snappy/SnappyCompressor.compress([BII[BII)I+57 ffffffff6b007b18 io/airlift/compress/snappy/SnappyFramedOutputStream.writeCompressed([BII)V+59 ffffffff6b008068 io/airlift/compress/snappy/SnappyFramedOutputStream.flushBuffer()V+34 ffffffff6b008068 * io/airlift/compress/snappy/SnappyFramedOutputStream.flush()V+32

dain commented 6 years ago

We don't have any sparc systems to test on, so this is not something we can generally support. Does sparc support unaligned reads, because we make no effort to align reads? Also, the code assumes a little endian native encoding. Adding support for either of these would likely make this code too difficult to support (and may slow stuff down).

If you can reproduce the problem on intel, I can fix it. Alternative, you can send a patch.

zolyfarkas commented 6 years ago

Thanks for the answer, if little-endian is supported only, the fact that it crashes on sparc should not be a surprise since SPARC is big-endian... same issues would probably be with ARM, POWER....

Maybe this should be documented in the readme: https://github.com/airlift/aircompressor... the 100% java statement is a bit misleading...

dain commented 5 years ago

I added code that verifies the VM is compatible with the compressor code, and updated the read me. Thanks.