Ignore:
Timestamp:
11/11/2009 14:19:10 (3 years ago)
Author:
ccowart
Message:

Merging new locking idiom from trunk.

Resolves #87

Location:
branches/confman-1.9
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/confman-1.9

    • Property svn:mergeinfo changed
      /trunkmerged: 465
  • branches/confman-1.9/confmanlib.sh.in

    r481 r483  
    131131 
    132132function conf_lock_wcopy { 
     133    local locktype 
    133134    conf_require_wcopy 
    134     ${LOCK} lock $$ $(conf_wcopy_lockfile) || exit 1 
     135 
     136    # If this process already has a lock on the wcopy 
     137    if conf_wcopy_is_locked; then 
     138        locktype="RECURSIVE" 
     139    else 
     140        locktype="ORIGINAL" 
     141    fi 
     142 
     143    ${LOCK} lock $$ $(conf_wcopy_lockfile) || die 
    135144    WCOPY_DIRTY="true" 
     145    echo $locktype 
    136146} 
    137147 
    138148function conf_unlock_wcopy { 
    139     local recursive_lock="$1" 
    140  
    141     # Don't release the lock if it was grabbed recursively 
    142     [ -n "$recursive_lock" ] && [ "$recursive_lock" = "1" ] && return 
    143  
    144     ${LOCK} unlock $$ $(conf_wcopy_lockfile) 
     149    local locktype="$1" 
     150 
     151    if [ "$locktype" = "RECURSIVE" ] ; then 
     152        return 0 
     153    elif [ "$locktype" = "ORIGINAL" ] ; then 
     154        ${LOCK} unlock $$ $(conf_wcopy_lockfile) 
     155        return $? 
     156    else 
     157        echo "Invalid lock type in conf_unlock_wcopy" >&4 
     158        die 
     159    fi 
    145160} 
    146161 
     
    150165 
    151166function conf_lock_system { 
    152     ${SUDO} ${LOCK} lock $$ "$LOCKFILE" || exit 1 
     167    local locktype 
     168 
     169    # If this process already has a lock on the wcopy 
     170    if conf_system_is_locked; then 
     171        locktype="RECURSIVE" 
     172    else 
     173        locktype="ORIGINAL" 
     174    fi 
     175 
     176    ${SUDO} ${LOCK} lock $$ "$LOCKFILE" || die 
     177    echo $locktype 
    153178} 
    154179 
    155180function conf_unlock_system { 
    156     ${SUDO} ${LOCK} unlock $$ "$LOCKFILE" 
     181    local locktype="$1" 
     182 
     183    if [ "$locktype" = "RECURSIVE" ] ; then 
     184        return 0 
     185    elif [ "$locktype" = "ORIGINAL" ] ; then 
     186        ${SUDO} ${LOCK} unlock $$ "$LOCKFILE" 
     187        return $? 
     188    else 
     189        echo "Invalid lock type in conf_unlock_system" >&2 
     190        die 
     191    fi 
    157192} 
    158193 
    159194function conf_system_is_locked { 
    160195    ${LOCK} haslock $$ "$LOCKFILE" 
     196} 
     197 
     198function conf_lock_is_recursive { 
     199    local locktype="$1" 
     200    case "$locktype" in 
     201        ORIGINAL)   return 1;; 
     202        RECURSIVE)  return 0;; 
     203        *)          echo "Invalid lock type in conf_lock_is_recursive" >&2 
     204                    die 
     205                    ;; 
     206    esac 
    161207} 
    162208 
     
    10581104    echo "Received a signal. Exiting cleanly." | conf_logger 
    10591105        echo "Please wait until I finish cleaning up after you." >&4 
    1060     conf_cleanExit 
     1106    conf_cleanExit 1 
    10611107} 
    10621108 
     
    10701116 
    10711117    conf_debug "Removing any system or working copy locks..." >&4 
    1072     conf_wcopy_is_locked && conf_unlock_wcopy 
    1073     conf_system_is_locked && conf_unlock_system 
     1118    conf_wcopy_is_locked && conf_unlock_wcopy ORIGINAL 
     1119    conf_system_is_locked && conf_unlock_system ORIGINAL 
    10741120         
    10751121        # And this clears any locks we may have created on our working copy: 
Note: See TracChangeset for help on using the changeset viewer.