Changeset c65ce1d for router


Ignore:
Timestamp:
Jun 30, 2018 2:13:34 PM (2 years ago)
Author:
zzz <zzz@…>
Branches:
master
Children:
eff0cac
Parents:
201ef3b
Message:

Router: Reselect jbigi lib when processor changes (ticket #2277)

Location:
router/java/src/net/i2p/router
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • router/java/src/net/i2p/router/Router.java

    r201ef3b rc65ce1d  
    1515import java.util.Collections;
    1616import java.util.EnumSet;
     17import java.util.HashMap;
    1718import java.util.LinkedList;
    1819import java.util.List;
     20import java.util.Locale;
    1921import java.util.Map;
    2022import java.util.Properties;
     
    2628import gnu.getopt.Getopt;
    2729
     30import freenet.support.CPUInformation.CPUID;
     31import freenet.support.CPUInformation.UnknownCPUException;
    2832import net.i2p.client.impl.I2PSessionImpl;
    2933import net.i2p.crypto.SigUtil;
     
    5559import net.i2p.stat.StatManager;
    5660import net.i2p.util.ByteCache;
     61import net.i2p.util.FileUtil;
    5762import net.i2p.util.FortunaRandomSource;
    5863import net.i2p.util.I2PAppThread;
     
    130135    private static final String EVENTLOG = "eventlog.txt";
    131136    private static final String PROP_JBIGI = "jbigi.loadedResource";
     137    private static final String PROP_JBIGI_PROCESSOR = "jbigi.lastProcessor";
    132138    public static final String UPDATE_FILE = "i2pupdate.zip";
    133139       
     
    12201226     */
    12211227    private void warmupCrypto() {
     1228        String oldLoaded = _context.getProperty(PROP_JBIGI);
     1229        String oldProcessor = _context.getProperty(PROP_JBIGI_PROCESSOR);
     1230        String processor = null;
     1231        if (SystemVersion.isX86()) {
     1232            // Check to see if processor changed since last time we ran,
     1233            // or if we detected a different processor model due to CPUID code changes,
     1234            // or if we changed 32/64 bit.
     1235            // If so, delete the old jbigi.so file, to protect against a JVM crash.
     1236            // We do this before calling elGamalEngine(), which calls NBI.
     1237            // We take care not to access the NBI class yet.
     1238            try {
     1239                processor = CPUID.getInfo().getCPUModelString();
     1240                if (SystemVersion.is64Bit())
     1241                    processor += "/64";
     1242                if (oldProcessor != null && !oldProcessor.equals(processor)) {
     1243                    // delete old so file
     1244                    boolean isWin = SystemVersion.isWindows();
     1245                    boolean isMac = SystemVersion.isMac();
     1246                    String osName = System.getProperty("os.name").toLowerCase(Locale.US);
     1247                    // only do this on these OSes
     1248                    boolean goodOS = isWin || isMac ||
     1249                                     osName.contains("linux") || osName.contains("freebsd");
     1250                    File jbigiJar = new File(_context.getBaseDir(), "lib/jbigi.jar");
     1251                    if (goodOS && jbigiJar.exists() && _context.getBaseDir().canWrite()) {
     1252                        String libPrefix = isWin ? "" : "lib";
     1253                        String libSuffix = isWin ? ".dll" : isMac ? ".jnilib" : ".so";
     1254                        File jbigiLib = new File(_context.getBaseDir(), libPrefix + "jbigi" + libSuffix);
     1255                        if (jbigiLib.canWrite()) {
     1256                            String path = jbigiLib.getAbsolutePath();
     1257                            boolean success = FileUtil.copy(path, path + ".bak", true, true);
     1258                            if (success) {
     1259                                success = jbigiLib.delete();
     1260                                if (success) {
     1261                                    System.out.println("Processor change detected, moved jbigi library to " +
     1262                                                       path + ".bak");
     1263                                    System.out.println("Check logs for successful installation of new library");
     1264                                }
     1265                            }
     1266                        }
     1267                    }
     1268                }
     1269            } catch (UnknownCPUException e) {}
     1270        }
    12221271        _context.random().nextBoolean();
    12231272        // Instantiate to fire up the YK refiller thread
    12241273        _context.elGamalEngine();
    12251274        String loaded = NativeBigInteger.getLoadedResourceName();
    1226         if (loaded != null)
    1227             saveConfig(PROP_JBIGI, loaded);
     1275        Map<String, String> changes = null;
     1276        if (loaded != null && !loaded.equals(oldLoaded)) {
     1277            changes = new HashMap<String, String>(2);
     1278            changes.put(PROP_JBIGI, loaded);
     1279        }
     1280        if (processor != null && !processor.equals(oldProcessor)) {
     1281            if (changes == null)
     1282                changes = new HashMap<String, String>(1);
     1283            changes.put(PROP_JBIGI_PROCESSOR, processor);
     1284        }
     1285        if (changes != null)
     1286            saveConfig(changes, null);
    12281287    }
    12291288   
  • router/java/src/net/i2p/router/RouterVersion.java

    r201ef3b rc65ce1d  
    1919    public final static String ID = "Monotone";
    2020    public final static String VERSION = CoreVersion.VERSION;
    21     public final static long BUILD = 1;
     21    public final static long BUILD = 2;
    2222
    2323    /** for example "-test" */
Note: See TracChangeset for help on using the changeset viewer.