public synchronized void sfPing(Object source) throws SmartFrogLivenessException {
public synchronized void sfPing(Object source) throws SmartFrogLivenessException, RemoteException {
    public synchronized void sfPing(Object source) throws SmartFrogLivenessException {        super.sfPing(source);        if (gcTimeout == -1) {            try {                gcTimeout = ((Integer) sfResolveHere(SmartFrogCoreKeys.SF_SUBPROCESS_GC_TIMEOUT)).intValue();            } catch (SmartFrogResolutionException r) {                gcTimeout = 0;            }            //System.out.println("SPGC being initialised - " + gcTimeout);            countdown = gcTimeout;        }        if (gcTimeout > 0) {            //System.out.println("SPGC lease being checked " + countdown);            if ((countdown-- < 0) && (sfChildren.size() == 0) &&                    (sfParent != null)) {                //System.out.println("SPGC being activated");                sfTerminate(TerminationRecord.normal(null));            } else {                //System.out.println("SPGC lease being reset");                countdown = gcTimeout;            }        } else {            //System.out.println("SPGC not enabled");        }    }