IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 16886


Ignore:
Timestamp:
Mar 8, 2008, 11:24:54 AM (18 years ago)
Author:
eugene
Message:

add thread safety to create/delete of buffers

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Ohana/src/opihi/lib.shell/BufferOps.c

    r16438 r16886  
    44static int     Nbuffers;
    55
     6static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
     7
     8// this function is NOT thread protected : it is only used in startup and/or shutdown
    69void InitBuffers () {
    710  Nbuffers = 0;
     
    912}
    1013
     14// this function is NOT thread protected : it is only used in startup and/or shutdown
    1115void FreeBuffers () {
    1216
     
    6670  if (i == Nbuffers) {
    6771    if (mode == OLDBUFFER) goto error;
    68     Nbuffers += 1;
     72    // lock to protect static array
     73    pthread_mutex_lock (&mutex);
     74    Nbuffers ++;
    6975    REALLOCATE (buffers, Buffer *, Nbuffers);
    7076    buffers[i] = InitBuffer ();
    7177    strcpy (buffers[i][0].name, name);
     78    pthread_mutex_unlock (&mutex);
    7279    return (buffers[i]);
    7380  }
     
    154161    return (TRUE);
    155162  }
    156 
    157163  free (in);
     164
     165  pthread_mutex_lock (&mutex);
    158166  for (j = i; j < Nbuffers - 1; j++) buffers[j] = buffers[j + 1];
    159   Nbuffers -= 1;
     167  Nbuffers --;
    160168  REALLOCATE (buffers, Buffer *, MAX (Nbuffers, 1));
     169  pthread_mutex_unlock (&mutex);
    161170  return (TRUE);
    162171}
     
    175184  free (buffers[i]);
    176185
     186  pthread_mutex_lock (&mutex);
    177187  for (j = i; j < Nbuffers - 1; j++) buffers[j] = buffers[j + 1];
    178 
    179   Nbuffers -= 1;
     188  Nbuffers --;
    180189  REALLOCATE (buffers, Buffer *, MAX (Nbuffers, 1));
     190  pthread_mutex_unlock (&mutex);
    181191  return (TRUE);
    182192}
     
    195205  free (buffers[i]);
    196206
     207  pthread_mutex_lock (&mutex);
    197208  for (j = i; j < Nbuffers - 1; j++) buffers[j] = buffers[j + 1];
    198 
    199   Nbuffers -= 1;
     209  Nbuffers --;
    200210  REALLOCATE (buffers, Buffer *, MAX (Nbuffers, 1));
     211  pthread_mutex_unlock (&mutex);
    201212  return (TRUE);
    202213}
Note: See TracChangeset for help on using the changeset viewer.