IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Aug 11, 2006, 4:51:50 PM (20 years ago)
Author:
eugene
Message:

working on threaded version

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Ohana/src/opihi/pcontrol/HostOps.c

    r8183 r8296  
    1212  HostPool_Done = InitStack ();
    1313  HostPool_Down = InitStack ();
    14   HostPool_Off = InitStack ();
     14  HostPool_Off  = InitStack ();
    1515}
    1616
     
    3535}
    3636
    37 Host *FindHostStack (IDtype HostID) {
    38 
    39   Host *host;
    40 
    41   host = FindHostPtr (HostID, PCONTROL_HOST_IDLE);
    42   if (host != NULL) return (host);
    43 
    44   host = FindHostPtr (HostID, PCONTROL_HOST_DOWN);
    45   if (host != NULL) return (host);
    46 
    47   host = FindHostPtr (HostID, PCONTROL_HOST_DONE);
    48   if (host != NULL) return (host);
    49 
    50   host = FindHostPtr (HostID, PCONTROL_HOST_BUSY);
    51   if (host != NULL) return (host);
    52 
    53   host = FindHostPtr (HostID, PCONTROL_HOST_OFF);
    54   if (host != NULL) return (host);
    55 
    56   return (NULL);
    57 }
    58 
    59 int FindNamedHostStack (char *name) {
    60 
    61   int N;
    62 
    63   N = FindNamedHost (name, PCONTROL_HOST_IDLE);
    64   if (N >= 0) return (PCONTROL_HOST_IDLE);
    65 
    66   N = FindNamedHost (name, PCONTROL_HOST_DOWN);
    67   if (N >= 0) return (PCONTROL_HOST_DOWN);
    68 
    69   N = FindNamedHost (name, PCONTROL_HOST_DONE);
    70   if (N >= 0) return (PCONTROL_HOST_DONE);
    71 
    72   N = FindNamedHost (name, PCONTROL_HOST_BUSY);
    73   if (N >= 0) return (PCONTROL_HOST_BUSY);
    74 
    75   N = FindNamedHost (name, PCONTROL_HOST_OFF);
    76   if (N >= 0) return (PCONTROL_HOST_OFF);
    77 
    78   return (-1);
    79 }
    80 
     37Stack *GetHostStackByName (char *name) {
     38  if (!strcasecmp (name, "idle")) return (HostPool_Idle);
     39  if (!strcasecmp (name, "down")) return (HostPool_Down);
     40  if (!strcasecmp (name, "done")) return (HostPool_Done);
     41  if (!strcasecmp (name, "busy")) return (HostPool_Busy);
     42  if (!strcasecmp (name, "off"))  return (HostPool_Off);
     43  return (NULL);
     44}
     45
     46/* add host to position in stack */
    8147int PutHost (Host *host, int StackID, int where) {
    8248
     
    8854
    8955  host[0].stack = StackID;
    90   stat = PutStack (stack, where, host);
    91   /* status (0, NULL); */
     56  stat = PushStack (stack, where, host, host[0].HostID, host[0].hostname);
     57  // XXX need to handle the error conditions, or we drop the host & leak memory
    9258  return (stat);
    9359}
    9460 
    95 Host *GetHost (int StackID, int where) {
    96 
    97   Host *host;
    98   Stack *stack;
    99 
    100   stack = GetHostStack (StackID);
    101   if (stack == NULL) return (NULL);
    102 
    103   host = GetStack (stack, where);
    104   return (host);
    105 }
    106 
    107 int FindHost (IDtype HostID, int StackID) {
    108 
    109   int i;
    110   Host *host;
    111   Stack *stack;
    112 
    113   stack = GetHostStack (StackID);
    114   if (stack == NULL) return (-2);
    115 
    116   for (i = 0; i < stack[0].Nobject; i++) {
    117     host = (Host *) stack[0].object[i];
    118     if (host[0].HostID == HostID) {
    119       return (i);
    120     }
    121   }
    122   return (-1);
    123 }
    124 
    125 Host *FindHostPtr (IDtype HostID, int StackID) {
    126 
    127   int i;
    128   Host *host;
    129   Stack *stack;
    130 
    131   stack = GetHostStack (StackID);
    132   if (stack == NULL) return (NULL);
    133 
    134   for (i = 0; i < stack[0].Nobject; i++) {
    135     host = (Host *) stack[0].object[i];
    136     if (host[0].HostID == HostID) {
    137       return (host);
    138     }
    139   }
    140   return (NULL);
    141 }
    142 
    143 Host *PullHost (IDtype HostID, int StackID) {
    144  
    145   int N;
    146   Host *host;
    147 
    148   N = FindHost (HostID, StackID);
    149   if (N < 0) return (NULL);
    150 
    151   host = GetHost (StackID, N);
    152   if (host == NULL) {
    153     gprint (GP_ERR, "programming error! host missing from stack\n");
    154     exit (1);
    155   }
    156   return (host);
    157 }
    158 
    159 int FindNamedHost (char *name, int StackID) {
    160 
    161   int i;
    162   Host *host;
    163   Stack *stack;
    164 
    165   stack = GetHostStack (StackID);
    166   if (stack == NULL) return (-2);
    167 
    168   for (i = 0; i < stack[0].Nobject; i++) {
    169     host = (Host *) stack[0].object[i];
    170     if (!strcasecmp (host[0].hostname, name)) {
    171       return (i);
    172     }
    173   }
    174   return (-1);
    175 }
     61/* find the host by ID in the defined host stacks */
     62Host *PullHostByID (IDtype HostID, int *StackID) {
     63
     64  Host *host;
     65
     66  *StackID = PCONTROL_HOST_IDLE;
     67  host = PullHostFromStackByID (*StackID, HostID);
     68  if (host != NULL) return (host);
     69
     70  *StackID = PCONTROL_HOST_DOWN;
     71  host = PullHostFromStackByID (*StackID, HostID);
     72  if (host != NULL) return (host);
     73
     74  *StackID = PCONTROL_HOST_DONE;
     75  host = PullHostFromStackByID (*StackID, HostID);
     76  if (host != NULL) return (host);
     77
     78  *StackID = PCONTROL_HOST_BUSY;
     79  host = PullHostFromStackByID (*StackID, HostID);
     80  if (host != NULL) return (host);
     81
     82  *StackID = PCONTROL_HOST_OFF;
     83  host = PullHostFromStackByID (*StackID, HostID);
     84  if (host != NULL) return (host);
     85
     86  *StackID = -1;
     87  return (NULL);
     88}
     89
     90/* find the host by ID in the defined host stacks */
     91Host *PullHostByName (char *name, int *StackID) {
     92
     93  Host *host;
     94
     95  *StackID = PCONTROL_HOST_IDLE;
     96  host = PullHostFromStackByName (*StackID, name);
     97  if (host != NULL) return (host);
     98
     99  *StackID = PCONTROL_HOST_DOWN;
     100  host = PullHostFromStackByName (*StackID, name);
     101  if (host != NULL) return (host);
     102
     103  *StackID = PCONTROL_HOST_DONE;
     104  host = PullHostFromStackByName (*StackID, name);
     105  if (host != NULL) return (host);
     106
     107  *StackID = PCONTROL_HOST_BUSY;
     108  host = PullHostFromStackByName (*StackID, name);
     109  if (host != NULL) return (host);
     110
     111  *StackID = PCONTROL_HOST_OFF;
     112  host = PullHostFromStackByName (*StackID, name);
     113  if (host != NULL) return (host);
     114
     115  *StackID = -1;
     116  return (NULL);
     117}
     118
     119Host *PullHostFromStackByID (int StackID, IDtype ID) {
     120
     121  Host *host;
     122  Stack *stack;
     123
     124  stack = GetHostStack (StackID);
     125  if (stack == NULL) return (NULL);
     126
     127  host = PullStackByID (stack, ID);
     128  return (host);
     129}
     130
     131Host *PullHostFromStackByName (int StackID, char *name) {
     132
     133  Host *host;
     134  Stack *stack;
     135
     136  stack = GetHostStack (StackID);
     137  if (stack == NULL) return (NULL);
     138
     139  host = PullStackByName (stack, name);
     140  return (host);
     141}
     142
     143/* find the host by ID in the defined host stacks (don't pull off stack) */
     144/* the Find functions are not thread-safe: DROP */
     145# if (0)
     146Host *FindHostByID (IDtype HostID, int *StackID) {
     147
     148  Host *host;
     149
     150  *StackID = PCONTROL_HOST_IDLE;
     151  host = FindHostInStackByID (*StackID, HostID);
     152  if (host != NULL) return (host);
     153
     154  *StackID = PCONTROL_HOST_DOWN;
     155  host = FindHostInStackByID (*StackID, HostID);
     156  if (host != NULL) return (host);
     157
     158  *StackID = PCONTROL_HOST_DONE;
     159  host = FindHostInStackByID (*StackID, HostID);
     160  if (host != NULL) return (host);
     161
     162  *StackID = PCONTROL_HOST_BUSY;
     163  host = FindHostInStackByID (*StackID, HostID);
     164  if (host != NULL) return (host);
     165
     166  *StackID = PCONTROL_HOST_OFF;
     167  host = FindHostInStackByID (*StackID, HostID);
     168  if (host != NULL) return (host);
     169
     170  *StackID = -1;
     171  return (NULL);
     172}
     173
     174/* find the host by Name in the defined host stacks (don't pull off stack) */
     175Host *FindHostByName (char *name, int *StackID) {
     176
     177  Host *host;
     178
     179  *StackID = PCONTROL_HOST_IDLE;
     180  host = FindHostInStackByName (*StackID, name);
     181  if (host != NULL) return (host);
     182
     183  *StackID = PCONTROL_HOST_DOWN;
     184  host = FindHostInStackByName (*StackID, name);
     185  if (host != NULL) return (host);
     186
     187  *StackID = PCONTROL_HOST_DONE;
     188  host = FindHostInStackByName (*StackID, name);
     189  if (host != NULL) return (host);
     190
     191  *StackID = PCONTROL_HOST_BUSY;
     192  host = FindHostInStackByName (*StackID, name);
     193  if (host != NULL) return (host);
     194
     195  *StackID = PCONTROL_HOST_OFF;
     196  host = FindHostInStackByName (*StackID, name);
     197  if (host != NULL) return (host);
     198
     199  *StackID = -1;
     200  return (NULL);
     201}
     202
     203Host *FindHostInStackByID (int StackID, IDtype ID) {
     204
     205  Host *host;
     206  Stack *stack;
     207
     208  stack = GetHostStack (StackID);
     209  if (stack == NULL) return (NULL);
     210
     211  host = FindStackByID (stack, ID);
     212  return (host);
     213}
     214
     215Host *FindHostInStackByName (int StackID, char *name) {
     216
     217  Host *host;
     218  Stack *stack;
     219
     220  stack = GetHostStack (StackID);
     221  if (stack == NULL) return (NULL);
     222
     223  host = FindStackByName (stack, name);
     224  return (host);
     225}
     226# endif
    176227
    177228IDtype AddHost (char *hostname) {
Note: See TracChangeset for help on using the changeset viewer.