home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 7 / FreshFishVol7.bin / bbs / comm / cyberpager-1.5.lha / CyberPager / source / library / handleResource.c < prev    next >
C/C++ Source or Header  |  1994-02-07  |  2KB  |  76 lines

  1. #include "memory.h"
  2.  
  3. PagerHandle_t *__saveds __asm AllocPagerHandle(register __a0 STRPTR LogProgram)
  4. {
  5.     PagerHandle_t *ph;
  6.  
  7.     if (!LogProgram)
  8.         LogProgram = "-";
  9.  
  10.     if (ph = MyAllocVec(sizeof(PagerHandle_t) + strlen(LogProgram) + 1)) {
  11.         InitSemaphore(&ph->ph_Sema);
  12.  
  13.         ph->ph_LogProgram = (STRPTR)&ph[1];
  14.         ph->ph_LogService = "-";
  15.         ph->ph_LogWho = "-";
  16.         strcpy(ph->ph_LogProgram, LogProgram);
  17.         ph->ph_LogLevel = -1;
  18.         ph->ph_LogRetries = 0;
  19.  
  20.         NewList(&ph->ph_LockList);
  21.         NewList(&ph->ph_ConfigList);
  22.         NewList((struct List *)&ph->ph_ServiceList);
  23.         NewList((struct List *)&ph->ph_AliasList);
  24.  
  25.         ObtainSemaphore(&HandleListSema);
  26.         AddTail((struct List *)&HandleList, (struct Node *)&ph->ph_Node);
  27.         ReleaseSemaphore(&HandleListSema);
  28.  
  29.         return ph;
  30.     }
  31.  
  32.     return (PagerHandle_t *) NULL;
  33. }
  34.  
  35. void __saveds __asm FreePagerHandle(register __a0 PagerHandle_t * ph)
  36. {
  37.     PrivatePagerAlias_t *pals;
  38.     PrivatePagerService_t *psvc;
  39.     ConfigEntry_t *ce;
  40.  
  41.     if (ph) {
  42.         ObtainSemaphore(&ph->ph_Sema);
  43.  
  44.         while ((pals = (PrivatePagerAlias_t *) ph->ph_AliasList.mlh_Head) != (PrivatePagerAlias_t *) & ph->ph_AliasList.mlh_Tail) {
  45.             pals->pals_UseCount = 1;    /* force the node to go
  46.                              * away when we call
  47.                              * FreePagerAlias() */
  48.             FreePagerAlias(&pals->pals_Alias);
  49.         }
  50.  
  51.         while ((psvc = (PrivatePagerService_t *) ph->ph_ServiceList.mlh_Head) != (PrivatePagerService_t *) & ph->ph_ServiceList.mlh_Tail) {
  52.             psvc->psvc_UseCount = 1;    /* force the node to go
  53.                              * away when we call
  54.                              * FreePagerService() */
  55.             FreePagerService(&psvc->psvc_Service);
  56.         }
  57.  
  58.         while ((ce = (ConfigEntry_t *) ph->ph_ConfigList.lh_Head) != (ConfigEntry_t *) & ph->ph_ConfigList.lh_Tail) {
  59.             ce->ce_UseCount = 1;    /* force the node to go away
  60.                          * when we call
  61.                          * FreePagerConfig() */
  62.             FreePagerConfig(ce->ce_Data);
  63.         }
  64.  
  65.         UnLockFiles(ph);
  66.  
  67.         ObtainSemaphore(&HandleListSema);
  68.         Remove((struct Node *)&ph->ph_Node);
  69.         ReleaseSemaphore(&HandleListSema);
  70.  
  71.         ReleaseSemaphore(&ph->ph_Sema);
  72.  
  73.         MyFreeVec(ph);
  74.     }
  75. }
  76.