getTrainingFile(getter_AddRefs(mTrainingFile));
        mNumDirtyingMessages(0){    if (!BayesianFilterLogModule)      BayesianFilterLogModule = PR_NewLogModule("BayesianFilter");    PRInt32 junkThreshold = 0;    nsresult rv;    nsCOMPtr<nsIPrefBranch> pPrefBranch(do_GetService(NS_PREFSERVICE_CONTRACTID, &rv));    if (pPrefBranch)      pPrefBranch->GetIntPref("mail.adaptivefilters.junk_threshold", &junkThreshold);    mJunkProbabilityThreshold = ((double) junkThreshold) / 100;    if (mJunkProbabilityThreshold == 0 || mJunkProbabilityThreshold >= 1)      mJunkProbabilityThreshold = kDefaultJunkThreshold;    PR_LOG(BayesianFilterLogModule, PR_LOG_ALWAYS, ("junk probabilty threshold: %f", mJunkProbabilityThreshold));    PRBool ok = (mGoodTokens && mBadTokens);    NS_ASSERTION(ok, "error allocating tokenizers");    if (ok)        readTrainingData();    else {      PR_LOG(BayesianFilterLogModule, PR_LOG_ALWAYS, ("error allocating tokenizers"));    }        // get parameters for training data flushing, from the prefs    nsCOMPtr<nsIPrefBranch> prefBranch;        nsCOMPtr<nsIPrefService> prefs = do_GetService(NS_PREFSERVICE_CONTRACTID, &rv);    NS_ASSERTION(NS_SUCCEEDED(rv),"failed accessing preferences service");    rv = prefs->GetBranch(nsnull, getter_AddRefs(prefBranch));    NS_ASSERTION(NS_SUCCEEDED(rv),"failed getting preferences branch");    rv = prefBranch->GetIntPref("mailnews.bayesian_spam_filter.flush.diryting_messages_threshold",&mDirtyingMessageWriteThreshold);    if (NS_FAILED(rv) || (mDirtyingMessageWriteThreshold <= 0) )        mDirtyingMessageWriteThreshold = DEFAULT_WRITE_TRAINING_DATA_MESSAGES_THRESHOLD;    rv = prefBranch->GetIntPref("mailnews.bayesian_spam_filter.flush.minimum_interval",&mMinFlushInterval);    // it is not a good idea to allow a minimum interval of under 1 second    if (NS_FAILED(rv) || (mMinFlushInterval <= 1000) )        mMinFlushInterval = DEFAULT_MIN_INTERVAL_BETWEEN_WRITES;    mTimer = do_CreateInstance(NS_TIMER_CONTRACTID, &rv);    NS_ASSERTION(NS_SUCCEEDED(rv), "unable to create a timer; training data will only be written on exit");        // the timer is not used on object construction, since for    // the time being there are no dirying messages    }