Changeset 4241:2e673249758d in roaraudio


Ignore:
Timestamp:
08/25/10 14:59:29 (14 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

implement some basic locking logic

File:
1 edited

Legend:

Unmodified
Added
Removed
  • roard/memlock.c

    r4234 r4241  
    6767} 
    6868 
     69static int memlock_lock(struct memlock * seg) { 
     70#ifdef ROAR_HAVE_MLOCK 
     71 return ROAR_MLOCK(seg->addr, seg->len); 
     72#else 
     73 return -1; 
     74#endif 
     75} 
     76 
     77static int memlock_unlock(struct memlock * seg) { 
     78 return -1; 
     79} 
     80 
    6981int memlock_str2level(const char * str) { 
    7082 if ( str == NULL ) 
     
    88100int memlock_set_level(int level) { 
    89101 static int old_level = MEMLOCK_NONE; 
     102 int i; 
     103 int ret = 0; 
    90104 
    91105 if ( !memlock_table_inited ) 
     
    95109  return 0; 
    96110 
    97  return -1; 
     111 for (i = 0; i < MAX_SEGMENTS; i++) { 
     112  if ( memlock_table[i].addr == NULL ) { 
     113   if ( level > old_level ) { 
     114    if ( memlock_table[i].level > old_level && memlock_table[i].level <= level ) 
     115     if ( memlock_lock(&(memlock_table[i])) == -1 ) 
     116      ret = -1; 
     117   } else { 
     118    if ( memlock_table[i].level <= old_level && memlock_table[i].level > level ) 
     119     if ( memlock_unlock(&(memlock_table[i])) == -1 ) 
     120      ret = -1; 
     121   } 
     122  } 
     123 } 
     124 
     125 old_level = level; 
     126 
     127 return ret; 
    98128} 
    99129 
Note: See TracChangeset for help on using the changeset viewer.