Example #1
0
static inline Context* mark_new_context_as_most_recently_used(   Context* context   ) {

    node_Add( &trie->least_recently_used, &context->least_recently_used );

    ++ trie->lru_context_count;

    /* Maybe recycle least recently used context: */
    if (trie->lru_context_count >= trie->max_lru_contexts) {
        
        Node* list = (Node*)&trie->least_recently_used;
        Node* node = list->prev;
        Context* to_die = (Context*)( (u32)node - (u32)(&((Context*)0)->least_recently_used) );
        assert( node != list );
        /* Only kill leafs, because that avoids */
        /* the problem of leaving dangling      */
        /* 'parent' pointers:                   */
        while (to_die->kids > 0) {
            node = node->prev;        assert( node != list );
            to_die = (Context*)( (u08*)node - (u08*)(&((Context*)0)->least_recently_used) );
        }
        assert( to_die->order >= 2);
        assert( to_die->parent->order == (to_die->order - 1) );
        node_Cut( node );
        context_delete( to_die );
    }

    return context;
}
Example #2
0
/*----------------------------------------------------------------------
     Offer to delete old sent-mail folders

  Args: sml       -- The list of sent-mail folders
        fcc_cntxt -- context to delete list of folders in
        type      -- label indicating type of folders being deleted
 
  ----*/
void
delete_old_mail(struct sm_folder *sml, CONTEXT_S *fcc_cntxt, char *type)
{
    char  prompt[150];
    struct sm_folder *sm;

    for(sm = sml; sm != NULL && sm->name != NULL; sm++){
	if(sm->name[0] == '\0')		/* can't happen */
	  continue;

        snprintf(prompt, sizeof(prompt),
	       "To save disk space, delete old%.10s mail folder \"%.30s\" ",
	       type, sm->name);
        if(want_to(prompt, 'n', 0, h_wt_delete_old, WT_FLUSH_IN) == 'y'){

	    if(!context_delete(fcc_cntxt, NULL, sm->name)){
		q_status_message1(SM_ORDER,
				  3, 3, "Error deleting \"%s\".", sm->name);
		dprint((1, "Error context_deleting %s in %s\n", sm->name,
			   (fcc_cntxt && fcc_cntxt->context)
				     ? fcc_cntxt->context : "<null>"));
            }
	    else{
		int index;

		if((index = folder_index(sm->name, fcc_cntxt, FI_FOLDER)) >= 0)
		  folder_delete(index, FOLDERS(fcc_cntxt));
	    }
	}else{
		/* break;*/ /* skip out of the whole thing when he says no */
		/* Decided to keep asking anyway */
        }
    }
}