-
Bug
-
Resolution: Fixed
-
P2
-
1.2.0
-
1.2beta2
-
sparc
-
solaris_2.6
-
Not verified
When running my UDP test again using green threads and the udpServer dies with the following fatal error when using a 1K buffer size. It dies
with a different error (SIGBUS) when using a 3K or greater buffer size. With native threads it passes with a buffer size of 1name breK or 2K. Once the buffer size is 3K or greater both native threads and green threads it dies with a SIGSEGV or SIGBUS error.
This bug happend using JDK1.2T on a SOLARIS 2.6 ULTRA SPARC Workstation.
I added the test program that reproduces this problem.
>% java udpServer -d -v -l 0
>% java udpClient -d -v -b 1 -c -l 100
>
>----------------
>SERVER DIES WITH
>----------------
>VERBOSE: port number is = 26000
>VERBOSE: loop count is = 0
>DEBUG: DATAGRAM SOCKET INFO
>DEBUG: --------------------
>DEBUG: getLocalPort() = 26000
>DEBUG: getSoTimeout() = 0
>DEBUG: Dump getLocalAddress()
>DEBUG: INET ADDRESS INFO
>DEBUG: -----------------
>DEBUG: getHostName() = 0.0.0.0
>DEBUG: getAllByName[0] = 0.0.0.0/0.0.0.0
>DEBUG: getByName() = 0.0.0.0/0.0.0.0
>DEBUG: getLocalHost() = lobo/129.148.27.228
>DEBUG: FIX: getAddress() =
>DEBUG: getHostAddress() = 0.0.0.0
>DEBUG: isMulticastAddress() = false
>DEBUG: read datagram message from lobo/129.148.27.228 at port 35390 length
= 1024
>FATAL ERROR in native code: wrong method ID passed to NewObject
> at java.net.PlainDatagramSocketImpl.receive(Native Method)
> at java.net.DatagramSocket.receive(DatagramSocket.java:223)
> at udpServer.<init>(udpServer.java:86)
> at udpServer.main(udpServer.java:60)
>SIGABRT 6* abort (generated by abort(3) routine)
> si_signo [6]: SIGABRT 6* abort (generated by abort(3) routine)
> si_errno [0]: Error 0
> si_code [-1]: SI_LWP [pid: 6199, uid: 71133]
> stackbase=F0000000, stackpointer=EFFFDDE0
>
>Full thread dump:
> "CachedReference sweeper" (TID:0xee300d30, sys_thread_t:0x106468,
state:CW) prio=9
> at java.lang.Object.wait(Native Method)
> at java.lang.Object.wait(Object.java:309)
> at java.lang.Runtime.waitForMemoryAdvice(Runtime.java:569)
> at
java.lang.ref.CachedReference$Sweeper.run(CachedReference.java:279)
> at java.lang.Thread.run(Thread.java:472)
> "Finalizer" (TID:0xee300368, sys_thread_t:0xa72f0, state:CW) prio=8
> at java.lang.Object.wait(Native Method)
> at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:85)
> at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:98)
> at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:131)
> "Reference handler" (TID:0xee300418, sys_thread_t:0xf7918, state:CW)
prio=10
> at java.lang.Object.wait(Native Method)
> at java.lang.Object.wait(Object.java:309)
> at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:197)
> "Async Garbage Collector" (TID:0xee3001f8, sys_thread_t:0xa3318,
state:CW) prio=1
> "Idle thread" (TID:0xee300240, sys_thread_t:0xa3210, state:R) prio=0
> "Clock" (TID:0xee300088, sys_thread_t:0xa3e08, state:CW) prio=12
> "main" (TID:0xee3000b0, sys_thread_t:0x209f8, state:R) prio=5 *current
thread*
> at java.net.PlainDatagramSocketImpl.receive(Native Method)
> at java.net.DatagramSocket.receive(DatagramSocket.java:223)
> at udpServer.<init>(udpServer.java:86)
> at udpServer.main(udpServer.java:60)
>Monitor Cache Dump:
> java.net.DatagramPacket@EE302080/EE366728: owner "main" (0x209f8, 1
entry)
> java.net.DatagramSocket@EE301280/EE377240: owner "main" (0x209f8, 1
entry)
> java.net.PlainDatagramSocketImpl@EE301278/EE363890: owner "main"
(0x209f8, 1 entry)
>Registered Monitor Dump:
> utf8 hash table: <unowned>
> JNI pinning lock: <unowned>
> JNI global reference lock: <unowned>
> BinClass lock: <unowned>
> Class linking lock: <unowned>
> Code rewrite lock: <unowned>
> Heap lock: <unowned>
> Monitor IO lock: <unowned>
> Child death monitor: <unowned>
> Event monitor: <unowned>
> I/O monitor: <unowned>
> Alarm monitor: <unowned>
> Waiting to be notified:
> "Clock" (0xa3e08)
> Sbrk lock: <unowned>
> Monitor cache expansion lock: <unowned>
> Thread queue lock: <unowned>
> Monitor registry: owner "main" (0x209f8, 1 entry)
>Thread Alarm Q:
> sys_thread_t 0xa3318 [Timeout in 516 ms]
>Abort
>% java udpServer -d -v -l 0
>% java udpClient -d -v -b 3 -c -l 100
>
>----------------
>SERVER DIES WITH
>----------------
>java udpServer -d -v -l 0
>VERBOSE: port number is = 26000
>VERBOSE: loop count is = 0
>DEBUG: DATAGRAM SOCKET INFO
>DEBUG: --------------------
>DEBUG: getLocalPort() = 26000
>DEBUG: getSoTimeout() = 0
>DEBUG: Dump getLocalAddress()
>DEBUG: INET ADDRESS INFO
>DEBUG: -----------------
>DEBUG: getHostName() = 0.0.0.0
>DEBUG: getAllByName[0] = 0.0.0.0/0.0.0.0
>DEBUG: getByName() = 0.0.0.0/0.0.0.0
>DEBUG: getLocalHost() = lobo/129.148.27.228
>DEBUG: FIX: getAddress() =
>DEBUG: getHostAddress() = 0.0.0.0
>DEBUG: isMulticastAddress() = false
>SIGBUS 10* bus error
> si_signo [10]: SIGBUS 10* bus error
> si_errno [0]: Error 0
> si_code [1]: BUS_ADRALN [addr: 0x53545566]
>
> stackbase=F0000000, stackpointer=EFFFDD78
>
>Full thread dump:
> "CachedReference sweeper" (TID:0xee300d30, sys_thread_t:0x106468,
state:CW) prio=9
> at java.lang.Object.wait(Native Method)
> at java.lang.Object.wait(Object.java:309)
> at java.lang.Runtime.waitForMemoryAdvice(Runtime.java:569)
> at
java.lang.ref.CachedReference$Sweeper.run(CachedReference.java:279)
> at java.lang.Thread.run(Thread.java:472)
> "Finalizer" (TID:0xee300368, sys_thread_t:0xa72f0, state:CW) prio=8
> at java.lang.Object.wait(Native Method)
> at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:85)
> at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:98)
> at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:131)
> "Reference handler" (TID:0xee300418, sys_thread_t:0xf7918, state:CW)
prio=10
> at java.lang.Object.wait(Native Method)
> at java.lang.Object.wait(Object.java:309)
> at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:197)
> "Async Garbage Collector" (TID:0xee3001f8, sys_thread_t:0xa3318,
state:CW) prio=1
> "Idle thread" (TID:0xee300240, sys_thread_t:0xa3210, state:R) prio=0
> "Clock" (TID:0xee300088, sys_thread_t:0xa3e08, state:CW) prio=12
> "main" (TID:0xee3000b0, sys_thread_t:0x209f8, state:R) prio=5 *current
thread*
> at java.net.InetAddress.<init>(InetAddress.java:69)
> at java.net.PlainDatagramSocketImpl.receive(Native Method)
> at java.net.DatagramSocket.receive(DatagramSocket.java:223)
> at udpServer.<init>(udpServer.java:86)
> at udpServer.main(udpServer.java:60)
>Monitor Cache Dump:
> java.net.DatagramPacket@EE302080/EE366728: owner "main" (0x209f8, 1
entry)
> java.net.DatagramSocket@EE301280/EE377240: owner "main" (0x209f8, 1
entry)
> java.net.PlainDatagramSocketImpl@EE301278/EE363890: owner "main"
(0x209f8, 1 entry)
>Registered Monitor Dump:
> utf8 hash table: <unowned>
> JNI pinning lock: <unowned>
> JNI global reference lock: <unowned>
> BinClass lock: <unowned>
> Class linking lock: <unowned>
> Code rewrite lock: <unowned>
> Heap lock: <unowned>
> Monitor IO lock: <unowned>
> Child death monitor: <unowned>
> Event monitor: <unowned>
> I/O monitor: <unowned>
> Alarm monitor: <unowned>
> Waiting to be notified:
> "Clock" (0xa3e08)
> Sbrk lock: <unowned>
> Monitor cache expansion lock: <unowned>
> Thread queue lock: <unowned>
> Monitor registry: owner "main" (0x209f8, 1 entry)
>Thread Alarm Q:
> sys_thread_t 0xa3318 [Timeout in 744 ms]
>Abort
with a different error (SIGBUS) when using a 3K or greater buffer size. With native threads it passes with a buffer size of 1name breK or 2K. Once the buffer size is 3K or greater both native threads and green threads it dies with a SIGSEGV or SIGBUS error.
This bug happend using JDK1.2T on a SOLARIS 2.6 ULTRA SPARC Workstation.
I added the test program that reproduces this problem.
>% java udpServer -d -v -l 0
>% java udpClient -d -v -b 1 -c -l 100
>
>----------------
>SERVER DIES WITH
>----------------
>VERBOSE: port number is = 26000
>VERBOSE: loop count is = 0
>DEBUG: DATAGRAM SOCKET INFO
>DEBUG: --------------------
>DEBUG: getLocalPort() = 26000
>DEBUG: getSoTimeout() = 0
>DEBUG: Dump getLocalAddress()
>DEBUG: INET ADDRESS INFO
>DEBUG: -----------------
>DEBUG: getHostName() = 0.0.0.0
>DEBUG: getAllByName[0] = 0.0.0.0/0.0.0.0
>DEBUG: getByName() = 0.0.0.0/0.0.0.0
>DEBUG: getLocalHost() = lobo/129.148.27.228
>DEBUG: FIX: getAddress() =
>DEBUG: getHostAddress() = 0.0.0.0
>DEBUG: isMulticastAddress() = false
>DEBUG: read datagram message from lobo/129.148.27.228 at port 35390 length
= 1024
>FATAL ERROR in native code: wrong method ID passed to NewObject
> at java.net.PlainDatagramSocketImpl.receive(Native Method)
> at java.net.DatagramSocket.receive(DatagramSocket.java:223)
> at udpServer.<init>(udpServer.java:86)
> at udpServer.main(udpServer.java:60)
>SIGABRT 6* abort (generated by abort(3) routine)
> si_signo [6]: SIGABRT 6* abort (generated by abort(3) routine)
> si_errno [0]: Error 0
> si_code [-1]: SI_LWP [pid: 6199, uid: 71133]
> stackbase=F0000000, stackpointer=EFFFDDE0
>
>Full thread dump:
> "CachedReference sweeper" (TID:0xee300d30, sys_thread_t:0x106468,
state:CW) prio=9
> at java.lang.Object.wait(Native Method)
> at java.lang.Object.wait(Object.java:309)
> at java.lang.Runtime.waitForMemoryAdvice(Runtime.java:569)
> at
java.lang.ref.CachedReference$Sweeper.run(CachedReference.java:279)
> at java.lang.Thread.run(Thread.java:472)
> "Finalizer" (TID:0xee300368, sys_thread_t:0xa72f0, state:CW) prio=8
> at java.lang.Object.wait(Native Method)
> at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:85)
> at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:98)
> at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:131)
> "Reference handler" (TID:0xee300418, sys_thread_t:0xf7918, state:CW)
prio=10
> at java.lang.Object.wait(Native Method)
> at java.lang.Object.wait(Object.java:309)
> at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:197)
> "Async Garbage Collector" (TID:0xee3001f8, sys_thread_t:0xa3318,
state:CW) prio=1
> "Idle thread" (TID:0xee300240, sys_thread_t:0xa3210, state:R) prio=0
> "Clock" (TID:0xee300088, sys_thread_t:0xa3e08, state:CW) prio=12
> "main" (TID:0xee3000b0, sys_thread_t:0x209f8, state:R) prio=5 *current
thread*
> at java.net.PlainDatagramSocketImpl.receive(Native Method)
> at java.net.DatagramSocket.receive(DatagramSocket.java:223)
> at udpServer.<init>(udpServer.java:86)
> at udpServer.main(udpServer.java:60)
>Monitor Cache Dump:
> java.net.DatagramPacket@EE302080/EE366728: owner "main" (0x209f8, 1
entry)
> java.net.DatagramSocket@EE301280/EE377240: owner "main" (0x209f8, 1
entry)
> java.net.PlainDatagramSocketImpl@EE301278/EE363890: owner "main"
(0x209f8, 1 entry)
>Registered Monitor Dump:
> utf8 hash table: <unowned>
> JNI pinning lock: <unowned>
> JNI global reference lock: <unowned>
> BinClass lock: <unowned>
> Class linking lock: <unowned>
> Code rewrite lock: <unowned>
> Heap lock: <unowned>
> Monitor IO lock: <unowned>
> Child death monitor: <unowned>
> Event monitor: <unowned>
> I/O monitor: <unowned>
> Alarm monitor: <unowned>
> Waiting to be notified:
> "Clock" (0xa3e08)
> Sbrk lock: <unowned>
> Monitor cache expansion lock: <unowned>
> Thread queue lock: <unowned>
> Monitor registry: owner "main" (0x209f8, 1 entry)
>Thread Alarm Q:
> sys_thread_t 0xa3318 [Timeout in 516 ms]
>Abort
>% java udpServer -d -v -l 0
>% java udpClient -d -v -b 3 -c -l 100
>
>----------------
>SERVER DIES WITH
>----------------
>java udpServer -d -v -l 0
>VERBOSE: port number is = 26000
>VERBOSE: loop count is = 0
>DEBUG: DATAGRAM SOCKET INFO
>DEBUG: --------------------
>DEBUG: getLocalPort() = 26000
>DEBUG: getSoTimeout() = 0
>DEBUG: Dump getLocalAddress()
>DEBUG: INET ADDRESS INFO
>DEBUG: -----------------
>DEBUG: getHostName() = 0.0.0.0
>DEBUG: getAllByName[0] = 0.0.0.0/0.0.0.0
>DEBUG: getByName() = 0.0.0.0/0.0.0.0
>DEBUG: getLocalHost() = lobo/129.148.27.228
>DEBUG: FIX: getAddress() =
>DEBUG: getHostAddress() = 0.0.0.0
>DEBUG: isMulticastAddress() = false
>SIGBUS 10* bus error
> si_signo [10]: SIGBUS 10* bus error
> si_errno [0]: Error 0
> si_code [1]: BUS_ADRALN [addr: 0x53545566]
>
> stackbase=F0000000, stackpointer=EFFFDD78
>
>Full thread dump:
> "CachedReference sweeper" (TID:0xee300d30, sys_thread_t:0x106468,
state:CW) prio=9
> at java.lang.Object.wait(Native Method)
> at java.lang.Object.wait(Object.java:309)
> at java.lang.Runtime.waitForMemoryAdvice(Runtime.java:569)
> at
java.lang.ref.CachedReference$Sweeper.run(CachedReference.java:279)
> at java.lang.Thread.run(Thread.java:472)
> "Finalizer" (TID:0xee300368, sys_thread_t:0xa72f0, state:CW) prio=8
> at java.lang.Object.wait(Native Method)
> at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:85)
> at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:98)
> at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:131)
> "Reference handler" (TID:0xee300418, sys_thread_t:0xf7918, state:CW)
prio=10
> at java.lang.Object.wait(Native Method)
> at java.lang.Object.wait(Object.java:309)
> at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:197)
> "Async Garbage Collector" (TID:0xee3001f8, sys_thread_t:0xa3318,
state:CW) prio=1
> "Idle thread" (TID:0xee300240, sys_thread_t:0xa3210, state:R) prio=0
> "Clock" (TID:0xee300088, sys_thread_t:0xa3e08, state:CW) prio=12
> "main" (TID:0xee3000b0, sys_thread_t:0x209f8, state:R) prio=5 *current
thread*
> at java.net.InetAddress.<init>(InetAddress.java:69)
> at java.net.PlainDatagramSocketImpl.receive(Native Method)
> at java.net.DatagramSocket.receive(DatagramSocket.java:223)
> at udpServer.<init>(udpServer.java:86)
> at udpServer.main(udpServer.java:60)
>Monitor Cache Dump:
> java.net.DatagramPacket@EE302080/EE366728: owner "main" (0x209f8, 1
entry)
> java.net.DatagramSocket@EE301280/EE377240: owner "main" (0x209f8, 1
entry)
> java.net.PlainDatagramSocketImpl@EE301278/EE363890: owner "main"
(0x209f8, 1 entry)
>Registered Monitor Dump:
> utf8 hash table: <unowned>
> JNI pinning lock: <unowned>
> JNI global reference lock: <unowned>
> BinClass lock: <unowned>
> Class linking lock: <unowned>
> Code rewrite lock: <unowned>
> Heap lock: <unowned>
> Monitor IO lock: <unowned>
> Child death monitor: <unowned>
> Event monitor: <unowned>
> I/O monitor: <unowned>
> Alarm monitor: <unowned>
> Waiting to be notified:
> "Clock" (0xa3e08)
> Sbrk lock: <unowned>
> Monitor cache expansion lock: <unowned>
> Thread queue lock: <unowned>
> Monitor registry: owner "main" (0x209f8, 1 entry)
>Thread Alarm Q:
> sys_thread_t 0xa3318 [Timeout in 744 ms]
>Abort