/// /// DeleteMailTransferList // remove all nodes from a list and free it completely void DeleteMailTransferList(struct MailTransferList *tlist) { ENTER(); if(tlist != NULL) { struct MailTransferNode *tnode; struct MailTransferNode *next; // lock the list just, just for safety reasons LockMailTransferList(tlist); // remove and free all remaining nodes in the list SafeIterateList(&tlist->list, struct MailTransferNode *, tnode, next) { DeleteMailTransferNode(tnode); } NewMinList(&tlist->list); // unlock the list again UnlockMailTransferList(tlist); // free the semaphore FreeSysObject(ASOT_SEMAPHORE, tlist->lockSemaphore); tlist->lockSemaphore = NULL; // free the list itself FreeSysObject(ASOT_LIST, tlist); } LEAVE(); }
void ami_schedule_close_timer(void) { if(ITimer) { DropInterface((struct Interface *)ITimer); } CloseDevice((struct IORequest *) tioreq); FreeSysObject(ASOT_IOREQUEST,tioreq); FreeSysObject(ASOT_PORT,msgport); }
/// /// CreateMailTransferList // create a new list for transfers struct MailTransferList *CreateMailTransferList(void) { struct MailTransferList *tlist; ENTER(); // at first create the list itself if((tlist = AllocSysObjectTags(ASOT_LIST, ASOLIST_Size, sizeof(*tlist), ASOLIST_Min, TRUE, TAG_DONE)) != NULL) { // now create the arbitration semaphore if((tlist->lockSemaphore = AllocSysObjectTags(ASOT_SEMAPHORE, TAG_DONE)) != NULL) { // no transfers in the list so far tlist->count = 0; } else { // free the list again on failure FreeSysObject(ASOT_LIST, tlist); tlist = NULL; } } RETURN(tlist); return tlist; }
void ami_misc_itempool_delete(APTR pool) { #ifdef __amigaos4__ FreeSysObject(ASOT_ITEMPOOL, pool); #else DeletePool(pool); #endif }
void NewFreeArgs(struct NewRDArgs *rdargs) { ENTER(); D(DBF_STARTUP, "FreeArgs(rdargs->FreeArgs)"); FreeArgs(rdargs->FreeArgs); if(rdargs->RDArgs != NULL) { free((void *)rdargs->RDArgs->RDA_Source.CS_Buffer); D(DBF_STARTUP, "FreeDosObject(DOS_RDARGS, rdargs->RDArgs)"); FreeDosObject(DOS_RDARGS, rdargs->RDArgs); } if(rdargs->Args != NULL) { ULONG i; for(i=0; i < rdargs->MaxArgs; i++) { if(rdargs->Args[i] != NULL) FreeVecPooled(rdargs->Pool, rdargs->Args[i]); } FreeVecPooled(rdargs->Pool, rdargs->Args); rdargs->Args = NULL; } if(rdargs->ToolWindow != NULL) { FreeVecPooled(rdargs->Pool, rdargs->ToolWindow); rdargs->ToolWindow = NULL; } if(rdargs->WinFH != 0) { D(DBF_STARTUP, "SelectOutput( .. ) .. Close( ... )"); SelectOutput(rdargs->OldOutput); SelectInput(rdargs->OldInput); Close(rdargs->WinFH); rdargs->WinFH = 0; } if(rdargs->Pool != NULL) { #if defined(__amigaos4__) FreeSysObject(ASOT_MEMPOOL, rdargs->Pool); #else DeletePool(rdargs->Pool); #endif rdargs->Pool = NULL; } D(DBF_STARTUP, "memory freed"); LEAVE(); }
ULONG freeBase(struct LibraryHeader *lib) { ENTER(); D(DBF_STARTUP, "freeing all resources of codesets.library"); // cleanup also the internal public codesets list codesetsCleanup(&lib->codesets); // close locale.library if(LocaleBase != NULL) { DROPINTERFACE(ILocale); CloseLibrary((struct Library *)LocaleBase); LocaleBase = NULL; } #if defined(__amigaos4__) // close diskfont.library if(DiskfontBase != NULL) { DROPINTERFACE(IDiskfont); CloseLibrary((struct Library *)DiskfontBase); DiskfontBase = NULL; } #endif // delete our private memory pool if(lib->pool != NULL) { #if defined(__amigaos4__) FreeSysObject(ASOT_MEMPOOL, lib->pool); #else DeletePool(lib->pool); #endif lib->pool = NULL; } // close utility.library if(UtilityBase != NULL) { DROPINTERFACE(IUtility); CloseLibrary((struct Library *)UtilityBase); UtilityBase = NULL; } // close dos.library if(DOSBase != NULL) { DROPINTERFACE(IDOS); CloseLibrary((struct Library *)DOSBase); DOSBase = NULL; } RETURN(TRUE); return TRUE; }
void SAVEDS handler(void) { struct Process *me = (struct Process *)FindTask(NULL); struct startMsg *smsg; struct MsgPort *port; BOOL res = FALSE; ENTER(); WaitPort(&me->pr_MsgPort); smsg = (struct startMsg *)GetMsg(&me->pr_MsgPort); #if defined(__amigaos4__) port = AllocSysObject(ASOT_PORT, TAG_DONE); #else port = CreateMsgPort(); #endif if(port != NULL) res = localSendRexxMsg(port, smsg->port, smsg->cmd); smsg->res = res; ReplyMsg((struct Message *)smsg); if(res == TRUE) { struct RexxMsg *rxmsg; WaitPort(port); rxmsg = (struct RexxMsg *)GetMsg(port); DeleteArgstring((APTR)rxmsg->rm_Args[0]); DeleteRexxMsg(rxmsg); } if(port != NULL) { #if defined(__amigaos4__) FreeSysObject(ASOT_PORT, port); #else DeleteMsgPort(port); #endif } ObtainSemaphore(&OpenURLBase->libSem); OpenURLBase->rexx_use--; ReleaseSemaphore(&OpenURLBase->libSem); #if !defined(__amigaos4__) // all systems except OS4 should leave this function in forbidden state Forbid(); #endif LEAVE(); }
/// /// DeleteMailTransferNode // free a transfer node that does not belong to a list void DeleteMailTransferNode(struct MailTransferNode *tnode) { ENTER(); DereferenceMail(tnode->mail); free(tnode->uidl); FreeSysObject(ASOT_NODE, tnode); LEAVE(); }
/// /// FreeSignatureList void FreeSignatureList(struct MinList *signatureList) { struct SignatureNode *sn; struct SignatureNode *next; ENTER(); // we have to free the signatureList SafeIterateList(signatureList, struct SignatureNode *, sn, next) { dstrfree(sn->signature); FreeSysObject(ASOT_NODE, sn); }
void ami_print_close_device(void) { CloseDevice((struct IORequest *)ami_print_info.PReq); FreeSysObject(ASOT_IOREQUEST,ami_print_info.PReq); }
void ami_print_free(void) { FreeSysObject(ASOT_PORT, ami_print_info.msgport); ami_print_info.msgport = NULL; }
void ami_print_close_device(void) { CloseDevice(ami_print_info.PReq); FreeSysObject(ASOT_IOREQUEST,ami_print_info.PReq); }