Changeset 5503:15152f742401 in roaraudio


Ignore:
Timestamp:
05/15/12 13:42:06 (12 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

disallow running appsched's _init() and _free() multiple or other members in wrong order

File:
1 edited

Legend:

Unmodified
Added
Removed
  • libroar/roardl.c

    r5482 r5503  
    4444#endif 
    4545 
     46#define RTF_RA_INITED       0x0001 
     47#define RTF_APPSCHED_INITED 0x0002 
     48#define RTF_APPSCHED_FREED  0x0004 
     49 
    4650struct roar_dl_lhandle { 
    4751 size_t refc; // currently unused. 
     
    5660  struct roar_notify_core * notifycore; 
    5761 } context; 
    58  int ra_inited; 
     62 unsigned int runtime_flags; 
    5963#if defined(ROAR_HAVE_LIBDL) 
    6064 void * handle; 
     
    536540   return -1; 
    537541 } else { 
    538   if ( lhandle->ra_inited ) 
     542  if ( lhandle->runtime_flags & RTF_RA_INITED ) 
    539543   return 0; 
    540544 
     
    634638 
    635639 if ( !((void*)lhandle < (void*)128) ) 
    636   lhandle->ra_inited = 1; 
     640  lhandle->runtime_flags |= RTF_RA_INITED; 
    637641 
    638642 return 0; 
     
    796800 
    797801 if ( func == NULL ) { 
     802  if ( trigger == ROAR_DL_APPSCHED_INIT ) { 
     803   lhandle->runtime_flags |= RTF_APPSCHED_INITED|RTF_APPSCHED_FREED; 
     804   lhandle->runtime_flags -= RTF_APPSCHED_FREED; 
     805  } else if ( trigger == ROAR_DL_APPSCHED_FREE ) { 
     806   lhandle->runtime_flags |= RTF_APPSCHED_INITED|RTF_APPSCHED_FREED; 
     807   lhandle->runtime_flags -= RTF_APPSCHED_INITED; 
     808  } 
    798809  roar_err_set(ROAR_ERROR_NOENT); 
    799810  return -1; 
     811 } 
     812 
     813 if ( trigger == ROAR_DL_APPSCHED_INIT ) { 
     814  if ( lhandle->runtime_flags & RTF_APPSCHED_INITED ) { 
     815   roar_err_set(ROAR_ERROR_BUSY); 
     816   return -1; 
     817  } 
     818 } else { 
     819  if ( !(lhandle->runtime_flags & RTF_APPSCHED_INITED) ) { 
     820   roar_err_set(ROAR_ERROR_BUSY); 
     821   return -1; 
     822  } 
    800823 } 
    801824 
     
    803826 ret = func(lhandle->para); 
    804827 roar_dl_context_store(lhandle); 
     828 
     829 if ( trigger == ROAR_DL_APPSCHED_INIT ) { 
     830  lhandle->runtime_flags |= RTF_APPSCHED_INITED|RTF_APPSCHED_FREED; 
     831  lhandle->runtime_flags -= RTF_APPSCHED_FREED; 
     832 } else if ( trigger == ROAR_DL_APPSCHED_FREE ) { 
     833  lhandle->runtime_flags |= RTF_APPSCHED_INITED|RTF_APPSCHED_FREED; 
     834  lhandle->runtime_flags -= RTF_APPSCHED_INITED; 
     835 } 
     836 
    805837 return ret; 
    806838} 
Note: See TracChangeset for help on using the changeset viewer.