diskUsage: replaced blocking sleep with semaphore

git-svn-id: https://svn.berlios.de/svnroot/repos/yacy/trunk@4957 6c8d7289-2bf4-0310-a012-ef5d649a1542
pull/1/head
danielr 17 years ago
parent 4a53649ee7
commit f7f9ceb967

@ -54,6 +54,7 @@ import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.concurrent.Semaphore;
import de.anomic.plasma.plasmaSwitchboard;
import de.anomic.server.logging.serverLog;
@ -470,16 +471,27 @@ nextLine:
{
private final InputStream stream;
private final List<String> output = new ArrayList<String>();
private final Semaphore dataIsRead = new Semaphore(1);
/**
* FIXME just for debugging
*/
private final String name;
private boolean done = false;
public consoleInterface (final InputStream stream, String name)
{
this.stream = stream;
this.name = name;
// block reading {@see getOutput()}
try {
dataIsRead.acquire();
} catch (InterruptedException e) {
// this should never happen because this is a constructor
e.printStackTrace();
}
}
public void run() {
// a second run adds data! a output.clear() maybe needed
try {
final InputStreamReader input = new InputStreamReader(stream);
final BufferedReader buffer = new BufferedReader(input);
@ -488,6 +500,7 @@ nextLine:
while (tries < 1000) {
tries++;
try {
// may block!
Thread.sleep(1);
} catch (InterruptedException e) {
// just stop sleeping
@ -499,22 +512,29 @@ nextLine:
while((line = buffer.readLine()) != null) {
output.add(line);
}
done = true;
} catch(final IOException ix) { log.logWarning("logpoint 4 " + ix.getMessage());}
dataIsRead.release();
} catch(final IOException ix) { log.logWarning("logpoint 6 " + ix.getMessage());}
}
/**
* waits until the stream is read and returns all data
*
* @return lines of text in stream
*/
public List<String> getOutput(){
while(!isDone()) {
try {
Thread.sleep(1);
} catch (InterruptedException e) {}
// wait that data is ready
try {
log.logInfo("logpoint 4 waiting for data of '"+ name +"'");
final long start = System.currentTimeMillis();
dataIsRead.acquire();
log.logInfo("logpoint 5 data ready for '"+ name +"' after "+ (System.currentTimeMillis() - start) +" ms");
} catch (InterruptedException e) {
// after interrupt just return what is available (maybe nothing)
}
// is just for checking availability, so release it immediatly
dataIsRead.release();
return output;
}
private boolean isDone() {
return done;
}
}
}

Loading…
Cancel
Save