[jcifs] jcifs-1.1.9 ArrayIndexOutOfBoundsException: -2146866174
madlg3 at vodafone.es
madlg3 at vodafone.es
Tue Mar 1 10:12:59 GMT 2005
Hi Mike,
I modified the T2 crawler in order to simulate several users performing
crawling and getting all ".doc" files. When I ran the test for 50 users
I got an exception like this:
java -Xms1024M -Xmx1024M -cp ".;jcifs-1.1.9.jar"
T2Crawler "smb://euk;euk:stinker@euk/euk-archive/" 50
java.lang.ArrayIndexOutOfBoundsException: -2146866174
at jcifs.smb.ServerMessageBlock.readInt4
(ServerMessageBlock.java:137)
at jcifs.smb.Trans2FindFirst2Response.readDataWireFormat
(Trans2FindFirst
at jcifs.smb.SmbComTransactionResponse.readBytesWireFormat
(SmbComTransac
at jcifs.smb.ServerMessageBlock.readWireFormat
(ServerMessageBlock.java:4
at jcifs.smb.SmbTransport.run(SmbTransport.java:455)
at java.lang.Thread.run(Thread.java:534)
smb://euk;euk:stinker@euk/euk-archive/19701011/Nokia/Poly So
jcifs.smb.SmbException: Timeout waiting for response from server:
euk/10.21
at jcifs.smb.SmbTransport.sendTransaction(SmbTransport.java:832)
at jcifs.smb.SmbSession.sendTransaction(SmbSession.java:246)
at jcifs.smb.SmbTree.sendTransaction(SmbTree.java:74)
at jcifs.smb.SmbFile.sendTransaction(SmbFile.java:689)
at jcifs.smb.SmbFile.queryPath(SmbFile.java:1230)
at jcifs.smb.SmbFile.exists(SmbFile.java:1285)
at jcifs.smb.SmbFile.isDirectory(SmbFile.java:1358)
at T2Crawler$CrawlerThread.run(T2Crawler.java:84)
smb://euk;euk:stinker@euk/euk-archive/19710607/jdk1.3.1_06/d
jcifs.smb.SmbException: Timeout waiting for response from server:
euk/10.21
smb://euk;euk:stinker@euk/euk-archive/19710607/javadocs/2003
at jcifs.smb.SmbSession.sendTransaction(SmbSession.java:246)
smb://euk;euk:stinker@euk/euk-archive/19701011/Nokia/Poly So
at jcifs.smb.SmbFile.sendTransaction(SmbFile.java:689)
at jcifs.smb.SmbFile.doFindFirstNext(SmbFile.java:1715)
at jcifs.smb.SmbFile.listFiles(SmbFile.java:1606)
at jcifs.smb.SmbFile.listFiles(SmbFile.java:1514)
at T2Crawler$CrawlerThread.run(T2Crawler.java:74)
jcifs.smb.SmbException: Timeout waiting for response from server:
euk/10.21
at jcifs.smb.SmbTransport.sendTransaction(SmbTransport.java:832)
at jcifs.smb.SmbSession.sendTransaction(SmbSession.java:246)
at jcifs.smb.SmbTree.sendTransaction(SmbTree.java:74)
at jcifs.smb.SmbFile.sendTransaction(SmbFile.java:689)
at jcifs.smb.SmbFile.doFindFirstNext(SmbFile.java:1715)
at jcifs.smb.SmbFile.listFiles(SmbFile.java:1606)
at jcifs.smb.SmbFile.listFiles(SmbFile.java:1514)
at T2Crawler$CrawlerThread.run(T2Crawler.java:74)
jcifs.smb.SmbException: Timeout waiting for response from server:
euk/10.21
at jcifs.smb.SmbTransport.sendTransaction(SmbTransport.java:832)
at jcifs.smb.SmbSession.sendTransaction(SmbSession.java:246)
at jcifs.smb.SmbTree.sendTransaction(SmbTree.java:74)
at jcifs.smb.SmbFile.sendTransaction(SmbFile.java:689)
at jcifs.smb.SmbFile.queryPath(SmbFile.java:1230)
at jcifs.smb.SmbFile.exists(SmbFile.java:1285)
at jcifs.smb.SmbFile.isDirectory(SmbFile.java:1358)
at T2Crawler$CrawlerThread.run(T2Crawler.java:84)
smb://euk;euk:stinker@euk/euk-archive/19710607/jdk1.3.1_06/d
java.lang.NullPointerException
at jcifs.smb.SmbTransport.sendTransaction(SmbTransport.java:795)
at jcifs.smb.SmbSession.sendTransaction(SmbSession.java:246)
at jcifs.smb.SmbTree.sendTransaction(SmbTree.java:74)
at jcifs.smb.SmbFile.sendTransaction(SmbFile.java:689)
at jcifs.smb.SmbFile.doFindFirstNext(SmbFile.java:1715)
at jcifs.smb.SmbFile.listFiles(SmbFile.java:1606)
at jcifs.smb.SmbFile.listFiles(SmbFile.java:1514)
at T2Crawler$CrawlerThread.run(T2Crawler.java:74)
smb://euk;euk:stinker@euk/euk-archive/19710607/jdk1.3.1_06/d
------------------------------------------------------------------------
------
The modified T2crawler code is as follows:
import jcifs.smb.SmbFile;
import jcifs.util.*;
import java.util.LinkedList;
import java.util.ListIterator;
import java.net.MalformedURLException;
import java.io.IOException;
import jcifs.smb.*;
public class T2Crawler extends Thread {
class Semaphore {
private int value = 0;
Semaphore() {value = 0;}
Semaphore(int initial) {value = initial;}
public synchronized void P() {
value--;
if (value < 0) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public synchronized void V() {
value++;
notify();
}
}
class CrawlerThread extends Thread {
LinkedList list;
Semaphore sem;
SmbFile dir;
int depth;
CrawlerThread( SmbFile dir, Semaphore sem, int depth ) {
this.dir = dir;
list = new LinkedList();
list.add( dir );
this.sem = sem;
this.depth = depth;
}
public void run() {
SmbFile d;
SmbFile l[];
while( list.isEmpty() == false ) {
int i;
d = (SmbFile)list.remove( 0 );
try {
l = d.listFiles();
/* This is flawed. It decrements depth too agressively and causes the
* thread to finish prematurely. I do not know of a way to fix this
* because there is no concept of a stack here.
*/
depth--;
for( i = 0; i < l.length; i++ ) {
//System.out.println( l[i] );
// if( depth++ > 0 && l[i].isDirectory() && !l
[i].isHidden() ) {
if( depth > 0 && l[i].isDirectory() ) {
list.add( l[i] );
}
else
{
if(l[i].getName().endsWith(".doc"))
{
System.out.println(getName() + " "
+ "Getting file: " + l[i].getCanonicalPath());
SmbFileInputStream
smbfileinputstream = new SmbFileInputStream(l[i]);
//FileOutputStream fileoutputstream
= new FileOutputStream(smbfileext.getName());
long lt = System.currentTimeMillis();
byte abyte0[] = new byte[8192];
int i1 = 0;
long l1 = lt;
int k;
while((k = smbfileinputstream.read
(abyte0)) > 0)
{
//fileoutputstream.write(abyte0,
0, k);
i1 += k;
}
long l2 = System.currentTimeMillis
() - lt;
System.out.println(i1 + " bytes
transfered in " + l2 / 1000L + " seconds at " + (long)(i1 / 1000) /
Math.max(1L, l2 / 1000L) + "Kbytes/sec");
smbfileinputstream.close();
//fileoutputstream.close();
}
}
}
} catch( Exception e ) {
System.out.println( d );
e.printStackTrace();
}
}
sem.V();
}
}
public void run()
{
try{
SmbFile[] l = top.listFiles();
dpth--;
for (int i = 0; i < l.length; i++) {
try {
// System.out.println(l[i]);
if (!l[i].isDirectory() || l[i].isHidden()) {
continue;
}
else
System.out.println(this.getName()+" crawling "+l
[i]);
if (dpth > 0) {
sem.P();
(new CrawlerThread(l[i], sem, dpth)).start();
}
} catch (Exception e) {
e.printStackTrace();
}
}
for (int i = 0; i < l.length; i++) {
l[i].canRead();
}
System.out.println(this.getName()+" Crawling finished ");
}catch(Exception smbE){
smbE.printStackTrace();
}
}
SmbFile top ;
Semaphore sem;
String dir;
int numThr;
int dpth;
T2Crawler( String dir, int numThreads, int depth, String nombre )
throws Exception {
super(nombre);
top = new SmbFile( dir );
sem = new Semaphore( numThreads );
this.dir = dir;
this.numThr = numThreads;
dpth = depth;
System.out.println("Starting user "+nombre);
}
public static void main(String[] argv) throws Exception {
if( argv.length != 2) {
System.out.println( "$ java -Djcifs.properties=miallen.prp
T2Crawler <dir> <num users> ");
System.exit(1);
}
for(int i=0;i<Integer.parseInt(argv[1]);i++)
{
T2Crawler t2 = new T2Crawler(argv[0], 1, 500,"User_"+i);
t2.start();
}
}
}
Do you have any idea about this problem?With older versions of jcifs
this didn´t occur. Before 1.1.19 I had problems with HP-UX machines
firing the EOF exception you commented on the 1.1.9 release
description. This problem never ocurred in Linux, windows and solaris
machines executing the same code to access the same share with same
number of users, do you have any idea why the HP-Ux machinew were
having this problem (I tried with PA-Risc and True64 and both had the
problem)
Regards,
Miguel
----- Mensaje Original -----
De: Michael B Allen <mba2000 at ioplex.com>
Fecha: Lunes, Febrero 28, 2005 9:16 am
Asunto: [jcifs] jcifs-1.1.9 released / Read Error
> When multiplexing I/O, if socket buffers fill up such that packets
> can be
> read in fragments (i.e. high load), it was possible for the 4 byte
> NetBIOSheader to be read incorrectly resulting in a bogus
> "unexpected EOF reading
> netbios session header" exception. This problem has been fixed.
> Also, some
> small javadoc updates have been applied.
>
> --
> IRC - where men are men, women are men, and the boys are FBI agents.
>
More information about the jcifs
mailing list