Well we are directly creating a new NodeUpdater object and then setting the node's pointer to it in the set() method, with no synchronization?
On Sat, Jun 17, 2006 at 07:56:13PM +0200, Florent Daigni?re (NextGen$) wrote:
> * Matthew Toseland <[EMAIL PROTECTED]> [2006-06-17 18:49:02]:
>
> > Synchronization? Might we end up making two NodeUpdater's?
>
>
> We are using callbacks, we have to be threadsafe btw I hardly see how
> that can cause a deadlock, so it won't hurt ;)
>
>
> NextGen$
> >
> > On Sat, Jun 17, 2006 at 02:27:00PM +0000, [EMAIL PROTECTED] wrote:
> > > Author: nextgens
> > > Date: 2006-06-17 14:26:52 +0000 (Sat, 17 Jun 2006)
> > > New Revision: 9262
> > >
> > > Modified:
> > > trunk/freenet/src/freenet/node/Version.java
> > > trunk/freenet/src/freenet/node/updater/AutoUpdateAllowedCallback.java
> > > trunk/freenet/src/freenet/node/updater/NodeUpdater.java
> > > trunk/freenet/src/freenet/node/updater/UpdaterEnabledCallback.java
> > > Log:
> > > 823: We allow the auto-updater to be enabled on the fly
> > >
> > > Modified: trunk/freenet/src/freenet/node/Version.java
> > > ===================================================================
> > > --- trunk/freenet/src/freenet/node/Version.java 2006-06-17 12:31:13 UTC
> > > (rev 9261)
> > > +++ trunk/freenet/src/freenet/node/Version.java 2006-06-17 14:26:52 UTC
> > > (rev 9262)
> > > @@ -18,7 +18,7 @@
> > > public static final String protocolVersion = "1.0";
> > >
> > > /** The build number of the current revision */
> > > - private static final int buildNumber = 822;
> > > + private static final int buildNumber = 823;
> > >
> > > /** Oldest build of Fred we will talk to */
> > > private static final int lastGoodBuild = 765;
> > >
> > > Modified:
> > > trunk/freenet/src/freenet/node/updater/AutoUpdateAllowedCallback.java
> > > ===================================================================
> > > --- trunk/freenet/src/freenet/node/updater/AutoUpdateAllowedCallback.java
> > > 2006-06-17 12:31:13 UTC (rev 9261)
> > > +++ trunk/freenet/src/freenet/node/updater/AutoUpdateAllowedCallback.java
> > > 2006-06-17 14:26:52 UTC (rev 9262)
> > > @@ -3,6 +3,7 @@
> > > import freenet.config.BooleanCallback;
> > > import freenet.config.InvalidConfigValueException;
> > > import freenet.node.Node;
> > > +import freenet.support.Logger;
> > >
> > > public class AutoUpdateAllowedCallback implements BooleanCallback {
> > >
> > > @@ -13,13 +14,15 @@
> > > }
> > >
> > > public boolean get() {
> > > - NodeUpdater nu = node.getNodeUpdater();
> > > - return nu.isAutoUpdateAllowed;
> > > + if(node.getNodeUpdater()==null)
> > > + return false;
> > > + else
> > > + return node.getNodeUpdater().isAutoUpdateAllowed;
> > > }
> > >
> > > public void set(boolean val) throws InvalidConfigValueException {
> > > if(val == get()) return;
> > > - // Good idea to prevent it ?
> > > - throw new InvalidConfigValueException("Cannot be updated on the
> > > fly for security reasons");
> > > + node.getNodeUpdater().setAutoupdateAllowed(val);
> > > + Logger.normal(this, "Node auto update is now allowed = "+val);
> > > }
> > > }
> > > \ No newline at end of file
> > >
> > > Modified: trunk/freenet/src/freenet/node/updater/NodeUpdater.java
> > > ===================================================================
> > > --- trunk/freenet/src/freenet/node/updater/NodeUpdater.java
> > > 2006-06-17 12:31:13 UTC (rev 9261)
> > > +++ trunk/freenet/src/freenet/node/updater/NodeUpdater.java
> > > 2006-06-17 14:26:52 UTC (rev 9262)
> > > @@ -54,7 +54,7 @@
> > > private boolean isRunning = false;
> > > private boolean isFetching = false;
> > >
> > > - public final boolean isAutoUpdateAllowed;
> > > + public boolean isAutoUpdateAllowed;
> > >
> > > private final UpdatedVersionAvailableUserAlert alert;
> > > private RevocationKeyFoundUserAlert revocationAlert;
> > > @@ -113,6 +113,7 @@
> > > }
> > >
> > > public synchronized void onFoundEdition(long l, USK key){
> > > + if(!isRunning) return;
> > > int found = (int)key.suggestedEdition;
> > >
> > > if(found > availableVersion){
> > > @@ -122,7 +123,6 @@
> > > maybeUpdate();
> > > }
> > > }, 60*1000); // leave some time in case we get later
> > > editions
> > > - this.isRunning=true;
> > > }
> > > }
> > >
> > > @@ -135,8 +135,6 @@
> > > isRunning=false;
> > > return;
> > > }
> > > -
> > > - isRunning=false;
> > > }
> > >
> > > alert.set(availableVersion,false);
> > > @@ -162,6 +160,7 @@
> > > private Object updateSync = new Object();
> > >
> > > public void Update() {
> > > + if(!isRunning) return;
> > > synchronized(updateSync) {
> > > innerUpdate();
> > > }
> > > @@ -466,6 +465,10 @@
> > > return isRunning;
> > > }
> > >
> > > + protected synchronized void kill(){
> > > + isRunning = false;
> > > + }
> > > +
> > > public synchronized void blow(String msg){
> > > if(hasBeenBlown){
> > > Logger.error(this, "The key has ALREADY been marked as
> > > blown!");
> > > @@ -490,12 +493,16 @@
> > > return revocationURI;
> > > }
> > >
> > > + protected synchronized void setAutoupdateAllowed(boolean b) {
> > > + this.isAutoUpdateAllowed = b;
> > > + }
> > > +
> > > public static NodeUpdater maybeCreate(Node node, Config config) throws
> > > Exception {
> > > SubConfig updaterConfig = new SubConfig("node.updater", config);
> > >
> > > updaterConfig.register("enabled", true, 1, false, "Enable Node's
> > > updater?",
> > > "Whether to enable the node's updater. It won't
> > > auto-update unless node.updater.autoupdate is true, it will just warn",
> > > - new UpdaterEnabledCallback(node));
> > > + new UpdaterEnabledCallback(node, config));
> > >
> > > boolean enabled = updaterConfig.getBoolean("enabled");
> > >
> > >
> > > Modified:
> > > trunk/freenet/src/freenet/node/updater/UpdaterEnabledCallback.java
> > > ===================================================================
> > > --- trunk/freenet/src/freenet/node/updater/UpdaterEnabledCallback.java
> > > 2006-06-17 12:31:13 UTC (rev 9261)
> > > +++ trunk/freenet/src/freenet/node/updater/UpdaterEnabledCallback.java
> > > 2006-06-17 14:26:52 UTC (rev 9262)
> > > @@ -1,24 +1,44 @@
> > > package freenet.node.updater;
> > >
> > > import freenet.config.BooleanCallback;
> > > +import freenet.config.Config;
> > > import freenet.config.InvalidConfigValueException;
> > > +import freenet.config.SubConfig;
> > > +import freenet.keys.FreenetURI;
> > > import freenet.node.Node;
> > > +import freenet.support.Logger;
> > >
> > > public class UpdaterEnabledCallback implements BooleanCallback {
> > >
> > > final Node node;
> > > + final Config nodeConfig;
> > >
> > > - UpdaterEnabledCallback(Node n) {
> > > + UpdaterEnabledCallback(Node n, Config nc) {
> > > this.node = n;
> > > + this.nodeConfig = nc;
> > > }
> > >
> > > public boolean get() {
> > > - return node.getNodeUpdater() != null;
> > > + if(node.nodeUpdater==null)
> > > + return false;
> > > + else
> > > + return node.nodeUpdater.isRunning();
> > > }
> > >
> > > public void set(boolean val) throws InvalidConfigValueException {
> > > if(val == get()) return;
> > > - // FIXME implement
> > > - throw new InvalidConfigValueException("Cannot be updated on the
> > > fly");
> > > + if(val){
> > > + try{
> > > + SubConfig sc = nodeConfig.get("node.updater");
> > > + node.nodeUpdater = new NodeUpdater(node ,
> > > sc.getBoolean("autoupdate"), new FreenetURI(sc.getString("URI")), new
> > > FreenetURI(sc.getString("revocationURI")));
> > > + Logger.normal(this, "Starting up the node
> > > updater");
> > > + }catch (Exception e){
> > > + Logger.error(this, "unable to start the node
> > > updater up "+e);
> > > + throw new InvalidConfigValueException("Unable
> > > to enable the Node Updater "+e);
> > > + }
> > > + }else{
> > > + node.nodeUpdater.kill();
> > > + Logger.normal(this, "Shutting down the node updater");
> > > + }
> > > }
> > > }
> > > \ No newline at end of file
> > >
> > > _______________________________________________
> > > cvs mailing list
> > > [email protected]
> > > http://emu.freenetproject.org/cgi-bin/mailman/listinfo/cvs
> > >
> >
> > --
> > Matthew J Toseland - [EMAIL PROTECTED]
> > Freenet Project Official Codemonkey - http://freenetproject.org/
> > ICTHUS - Nothing is impossible. Our Boss says so.
>
>
>
> > _______________________________________________
> > Devl mailing list
> > [email protected]
> > http://emu.freenetproject.org/cgi-bin/mailman/listinfo/devl
> _______________________________________________
> Devl mailing list
> [email protected]
> http://emu.freenetproject.org/cgi-bin/mailman/listinfo/devl
>
--
Matthew J Toseland - [EMAIL PROTECTED]
Freenet Project Official Codemonkey - http://freenetproject.org/
ICTHUS - Nothing is impossible. Our Boss says so.
signature.asc
Description: Digital signature
_______________________________________________ Devl mailing list [email protected] http://emu.freenetproject.org/cgi-bin/mailman/listinfo/devl
