2007-01-30 zzz
* i2psnark: Don't hold _snarks lock while checking a snark, so web page is responsive at startup
This commit is contained in:
@ -16,6 +16,7 @@ public class SnarkManager implements Snark.CompleteListener {
|
|||||||
|
|
||||||
/** map of (canonical) filename to Snark instance (unsynchronized) */
|
/** map of (canonical) filename to Snark instance (unsynchronized) */
|
||||||
private Map _snarks;
|
private Map _snarks;
|
||||||
|
private Object _addSnarkLock;
|
||||||
private String _configFile;
|
private String _configFile;
|
||||||
private Properties _config;
|
private Properties _config;
|
||||||
private I2PAppContext _context;
|
private I2PAppContext _context;
|
||||||
@ -34,6 +35,7 @@ public class SnarkManager implements Snark.CompleteListener {
|
|||||||
|
|
||||||
private SnarkManager() {
|
private SnarkManager() {
|
||||||
_snarks = new HashMap();
|
_snarks = new HashMap();
|
||||||
|
_addSnarkLock = new Object();
|
||||||
_context = I2PAppContext.getGlobalContext();
|
_context = I2PAppContext.getGlobalContext();
|
||||||
_log = _context.logManager().getLog(SnarkManager.class);
|
_log = _context.logManager().getLog(SnarkManager.class);
|
||||||
_messages = new ArrayList(16);
|
_messages = new ArrayList(16);
|
||||||
@ -289,7 +291,16 @@ public class SnarkManager implements Snark.CompleteListener {
|
|||||||
Snark torrent = null;
|
Snark torrent = null;
|
||||||
synchronized (_snarks) {
|
synchronized (_snarks) {
|
||||||
torrent = (Snark)_snarks.get(filename);
|
torrent = (Snark)_snarks.get(filename);
|
||||||
|
}
|
||||||
|
// don't hold the _snarks lock while verifying the torrent
|
||||||
if (torrent == null) {
|
if (torrent == null) {
|
||||||
|
synchronized (_addSnarkLock) {
|
||||||
|
// double-check
|
||||||
|
synchronized (_snarks) {
|
||||||
|
if(_snarks.get(filename) != null)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
FileInputStream fis = null;
|
FileInputStream fis = null;
|
||||||
try {
|
try {
|
||||||
fis = new FileInputStream(sfile);
|
fis = new FileInputStream(sfile);
|
||||||
@ -305,8 +316,10 @@ public class SnarkManager implements Snark.CompleteListener {
|
|||||||
} else {
|
} else {
|
||||||
torrent = new Snark(filename, null, -1, null, null, false, dataDir.getPath());
|
torrent = new Snark(filename, null, -1, null, null, false, dataDir.getPath());
|
||||||
torrent.completeListener = this;
|
torrent.completeListener = this;
|
||||||
|
synchronized (_snarks) {
|
||||||
_snarks.put(filename, torrent);
|
_snarks.put(filename, torrent);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
} catch (IOException ioe) {
|
} catch (IOException ioe) {
|
||||||
addMessage("Torrent in " + sfile.getName() + " is invalid: " + ioe.getMessage());
|
addMessage("Torrent in " + sfile.getName() + " is invalid: " + ioe.getMessage());
|
||||||
if (sfile.exists())
|
if (sfile.exists())
|
||||||
@ -315,10 +328,10 @@ public class SnarkManager implements Snark.CompleteListener {
|
|||||||
} finally {
|
} finally {
|
||||||
if (fis != null) try { fis.close(); } catch (IOException ioe) {}
|
if (fis != null) try { fis.close(); } catch (IOException ioe) {}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
// ok, snark created, now lets start it up or configure it further
|
// ok, snark created, now lets start it up or configure it further
|
||||||
File f = new File(filename);
|
File f = new File(filename);
|
||||||
if (!dontAutoStart && shouldAutoStart()) {
|
if (!dontAutoStart && shouldAutoStart()) {
|
||||||
|
@ -1,4 +1,8 @@
|
|||||||
$Id: history.txt,v 1.546 2007-01-28 23:03:37 zzz Exp $
|
$Id: history.txt,v 1.547 2007-01-29 23:05:23 zzz Exp $
|
||||||
|
|
||||||
|
2007-01-30 zzz
|
||||||
|
* i2psnark: Don't hold _snarks lock while checking a snark,
|
||||||
|
so web page is responsive at startup
|
||||||
|
|
||||||
2007-01-29 zzz
|
2007-01-29 zzz
|
||||||
* i2psnark: Add NickyB tracker
|
* i2psnark: Add NickyB tracker
|
||||||
|
@ -15,9 +15,9 @@ import net.i2p.CoreVersion;
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class RouterVersion {
|
public class RouterVersion {
|
||||||
public final static String ID = "$Revision: 1.482 $ $Date: 2007-01-28 23:03:36 $";
|
public final static String ID = "$Revision: 1.483 $ $Date: 2007-01-29 23:05:21 $";
|
||||||
public final static String VERSION = "0.6.1.26";
|
public final static String VERSION = "0.6.1.26";
|
||||||
public final static long BUILD = 16;
|
public final static long BUILD = 17;
|
||||||
public static void main(String args[]) {
|
public static void main(String args[]) {
|
||||||
System.out.println("I2P Router version: " + VERSION + "-" + BUILD);
|
System.out.println("I2P Router version: " + VERSION + "-" + BUILD);
|
||||||
System.out.println("Router ID: " + RouterVersion.ID);
|
System.out.println("Router ID: " + RouterVersion.ID);
|
||||||
|
Reference in New Issue
Block a user