Memory leak
I have a memory leak in one function, but I have no idea why it leaks.
This is the function:
protected void ProcessState_FILE_SEND(){
byte[] data = new byte[readSize];
int dataRead = 0;
//If it is the first file. Also a file discriptor has to be send.
if(currentFile == -1){
NextFile(); //Get the first file.
try{ //Send the file discriptor.
Send_File_Discriptor(sessionID,
filelistWorking[currentFile].getName(),
filelistWorking[currentFile].length(), GenerateFileID());
} catch (IOException e1) {
System.out.println("Error reading file:
"+filelistWorking[currentFile].getName());
Disconnect();
return;
}
}
try {
dataRead = ReadFile(data); //Read the file data.
if(dataRead != -1){
Send_File_Data(sessionID, data); //Send the data.
bytesSend += dataRead;
}
} catch (IOException e1) {
System.out.println("Error reading file:
"+filelistWorking[currentFile].getName());
Disconnect();
return;
}
//The file is done reading and the next file should be send and the
beginning of his data.
if(dataRead == -1){
UpdateStats(); //Update the stats so the correct bytesSend is
added.
NextFile(); //Get the next file.
if(currentFile < filelistWorking.length){ //If it is not the last
file..
try { //Send discriptor, read and send the data.
Send_File_Discriptor(sessionID,
filelistWorking[currentFile].getName(),
filelistWorking[currentFile].length(), GenerateFileID());
dataRead = ReadFile(data);
Send_File_Data(sessionID, data);
bytesSend += dataRead;
} catch (IOException e1) {
System.out.println("Error reading file:
"+filelistWorking[currentFile].getName());
Disconnect();
return;
}
}else{ //If there are no files left to send.
try{
Send_Got_Files_Correctly(sessionID, GetFilelist());
state = LAST_CHECK;
}catch(IOException e){
Disconnect();
return;
}
}
}
}
When analyzing the program I noticed that the byte[] data variable
(declared in the beginning of the method) eats all my memory and
doesn't get released. Does anyone knows why this happens and how to
fix this?
Erik