-
Bug
-
Resolution: Won't Fix
-
P4
-
None
-
1.1.7, 1.1.8
-
x86
-
windows_98, windows_nt
Name: krT82822 Date: 03/07/99
orig synopsis: "Non-fatal JIT error using Novell JNDI providers"
The java interpreter gave me a non-fatal JIT error and asked that I report this to you. So here it is.
I was fooling around with JNDI using the novell providers, I wrote a small program to list JNDI contexts and I get a JIT error when trying to list the
contents of the server name space.
This is the error:
---
C:\java\projects\JUExport>java JUExport Servers/marvin
Using NDS context Servers/marvin
A nonfatal internal JIT (3.00.072b(x)) error 'BinaryNonCommunitive' has occurred
in :
'com/novell/service/server/ServerSchemaContext.<init> (ZLjava/lang/String;)V':
Interpreting method.
Please report this error in detail to http://java.sun.com/cgi-bin/bugreport.cg
i
Bindery
NCPExtensions
FileSystem
---
If I invoke java with the nojit option I get no error.
---
C:\java\projects\JUExport>java -nojit JUExport Servers/marvin
Using NDS context Servers/marvin
Bindery
NCPExtensions
FileSystem
---
Novell specifically mentions JDK1.1.5 in their NJCL documentation so perhaps this is a version issue.
Here is my setup:
HW: PII 266 - 64 Mb RAM.
Windows 98 [Version 4.10.1998]
java version "1.1.7B"
java full version "JDK1.1.7U"
CLASSPATH =
C:\Java\JDK1.1.7B\lib\classes.zip;C:\Java\JDK1.1.7B\lib\;.;C:\Java\JDK1.1.7B\Swi
ng-1.1\swingall.jar;c:\java\novell\lib\jndi.jar;c:\java\novell\lib\njcl.jar;c:\j
ava\novell\lib\Help.jar;c:\java\novell\lib\jgl3.1.0.jar
PATH=
C:\JAVA\JDK11~1.7B\BIN;C:\JAVA\JDK1.2\BIN;C:\NOVELL\CLIENT32;C:\WIN98;C:\WI
N98\COMMAND;C:\BIN;C:\JAVA\NOVELL\BIN;Z:.;C:\JAVA\NOVELL\BIN
Novell providers downloaded from their website on 03/04/99
NJCL.EXE - the downloaded archive file has the following info.
file size: 8 753 636 bytes
The file NJCL.TXT has the heading:
Novell Class Libraries for Java
12/14/98
The JNDI.JAR and NJCL.JAR are both dated January 1999.
Here is the program that reports the error (2 files).
Files compiled thus: javac *.java
JUExport.java
---
import com.novell.* ;
public class JUExport {
public static void main(String[] args) {
UExport ex = null ;
if (args.length < 1) {
System.out.println("JUExport usage:");
System.out.println(" java JUExport <tree name>/<nds context>");
System.out.println("example:");
System.out.println(" java JUExport EMA_TREE/.corp.nyc.ema");
System.out.println("To export users in the corp container in the EMA_TREE tree.");
} else {
System.out.println("Using NDS context " + args[0]) ;
ex = new UExport() ;
try {
ex.export(args[0]) ;
} catch (Exception exc) {
System.err.println(exc.toString());
}
}
}
}
---
UExport.java
---
import java.util.* ;
import javax.naming.* ;
public class UExport {
Hashtable env ;
public UExport() {
// Setup the novell JNDI initial context.
env = new Hashtable() ;
env.put(Context.INITIAL_CONTEXT_FACTORY,
"com.novell.service.nw.NetWareInitialContextFactory");
}
public void export(String exportContext) {
// Get a listing of the initial context
try {
Context ctx = new InitialContext(env) ;
ctx = (Context) ctx.lookup(exportContext) ;
NamingEnumeration nameClassEnum = ctx.list("") ;
// Dump the listing to stdout
while (nameClassEnum.hasMore()) {
NameClassPair nPair = (NameClassPair)nameClassEnum.next() ;
System.out.println(nPair.getName()) ;
}
} catch (NamingException exc) {
System.err.println("JNDIListObjs failed");
System.err.println(exc.toString());
}
}
}
---
If there is any more information you need I can be contacted by email
###@###.###
Regards,
Johan Maasing
(Review ID: 55112)
======================================================================
Name: krT82822 Date: 06/25/99
Running the attached java application to test the java random
number generator always generates the message:
A nonfatal internal JIT (3.00.072b(x))error 'BinaryNonCommutative' has occurred in :
'showBugs.runsTest ()V': Interpreting method.
Please report this error in detail to http://java.sun.com/cgi-bin/bugreport.cgi
So, here's the report.
The program works fine. For what it's worth, if anything,
the program runs with no such message on jdk.1.1.6 on a
Sun Solaris platform, as opposed to the Dell workstation
running jdk1.1.8 & NT 4.0 that generates the error.
import java.util.*;
class showBug
// On jdk1.1.8 on NT 4.0, always produces the following error:
// A nonfatal internal JIT (3.00.072b(x)) error 'BinaryNonCommutative' has occurred in :
// 'showBugs.runsTest ()V': Interpreting method.
// Please report this error in detail to http://java.sun.com/cgi-bin/bugreport.cgi
{
static final int howMany = 625; // # to generate = 20,000 / 32;
static byte bitArray[] = new byte [32 * howMany + 1]; // Last "bit" used as sentinel
// See runsTest for description
public static void main (String[] args)
{
System.out.println("Test of random number generation.");
Random r = new Random ();
int randomNumber;
int onesGenerated = 0;
System.out.println ("Starting bit random number tests.");
for (int j = 0; j < howMany; j++) // get 32 bits at a time
{
randomNumber = r.nextInt ();
saveBits (randomNumber, 32 * j);
} // End for j
System.out.println ("Number of bits generated: " + (howMany * 32));
runsTest();
} // End main
public static void runsTest ()
{
int length = 1; // Length of current run
int curBit = 0; // Bit being examined
int nextBit = curBit + 1; // Bit after curBit
int maxRun = 0; // Longest run found so far
int bitCount = howMany * 32;
// The blocks & gaps arrays count the # of runs of 1's
// (blocks) & 0's (gaps). Note since there are no runs
// of length 0, blocks[0] & gaps[0] are unused. Runs of
// lengths > 6 are counted as runs of length 6.
// Otherwise, blocks[i] = # of runs of i 1's
// gaps[i] = # of runs of i 0's
// The max & min arrays are the upper & lower bounds on
// the permissible value; to pass, block & gap counts
// must be less than the max & greater than the min.
int blocks[] = { 0, 0, 0, 0, 0, 0, 0};
int gaps [] = { 0, 0, 0, 0, 0, 0, 0};
int max [] = { 0, 2733, 1421, 748, 402, 223, 223};
int min [] = { 0, 2267, 1079, 502, 223, 90, 90};
if (bitArray [bitCount-1] == 1) // Set the 20,001st bit to the
{ // complement of the last bit
bitArray [bitCount] = 0; // This makes the following loop
} // always end a run at the last
else // bit & makes the while terminate
{ // correctly with no special end
bitArray [bitCount] = 1; // case code
}
while (curBit < bitCount)
{
if (bitArray [curBit] != bitArray [nextBit]) // Then curBit is end of run
{
if (length > maxRun) // Current run > biggest so far?
{
maxRun = length;
}
if (length > 6) // Runs > 6 are counted as length = 6
{
length = 6;
}
if (bitArray [curBit] == (byte)1) // Is this a run of 1's or 0's?
{
blocks [length] += 1; // 1's -- inc. block count of that length
}
else
{
gaps [length] += 1;
}
length = 0; // Clear length of the new run (inc'ed below)
}
curBit += 1;
nextBit += 1;
length += 1;
} // End of while loop
// Print out the results
System.out.println ("Results of runs test: ");
System.out.println ("Max length run (must be < 34): " + maxRun);
for (int i = 1; i <= 6; i++)
{
System.out.print ("Blocks [ " + i + " ] = " + blocks[i]);
System.out.print (" Range: " + min[i] + " - " + max[i]);
if (min[i] < blocks[i] &&
max[i] > blocks[i])
{
System.out.println (" PASSED!");
}
else
{
System.out.println (" FAILED!!!");
}
}
for (int i = 1; i <= 6; i++)
{
System.out.print (" Gaps [ " + i + " ] = " + gaps [i]);
System.out.print (" Range: " + min[i] + " - " + max[i]);
if (min[i] < gaps[i] &&
max[i] > gaps[i])
{
System.out.println (" PASSED!");
}
else
{
System.out.println (" FAILED!!!");
}
}
} // End runsTest
public static void saveBits (int random, int bitPosition)
{
int copy = random;
for (int i = 31; i >= 0; i--)
{
bitArray [bitPosition + i] = (byte)(0x1 & copy);
// System.out.println ("bitArray [" + (bitPosition+i) + "] " + bitArray[bitPosition+i]);
copy = copy >> 1;
}
} // End saveBits
}
(Review ID: 84850)
======================================================================
Name: krT82822 Date: 09/06/99
A nonfatal internal JIT (3.00.072b(x)) 'BinaryNonCommunitive'
error has occurred when a program containing a class (called
Clerk) implementing a Runnable interface was run. That class
Clerk has a private field of type Bank where Bank is another
class in that program containing methods credit(Account theAcct,
int amount) and debit(Account theAcct, int amount) (here Account
refers to another class in that program). The problem does NOT
occur when the methods credit() and debit() are declared as
synchronized. However if those methods are not synchronized but
instead inside each of them a block of code related to the object
theAcct is synchronized, the reproted error occurs consistently.
(Review ID: 94917)
======================================================================