Parsed: 109992

  public static function create_lock( $lock_name, $release_timeout = null ) {
    global $wpdb;
    if ( ! $release_timeout ) {
      $release_timeout = HOUR_IN_SECONDS;
    }
    $lock_option = $lock_name . '.lock';

    // Try to lock.
    $lock_result = $wpdb->query( $wpdb->prepare( "INSERT IGNORE INTO `$wpdb->options` ( `option_name`, `option_value`, `autoload` ) VALUES (%s, %s, 'no') /* LOCK */", $lock_option, time() ) );

    if ( ! $lock_result ) {
      $lock_result = get_option( $lock_option );

      // If a lock couldn't be created, and there isn't a lock, bail.
      if ( ! $lock_result ) {
        return false;
      }

      // Check to see if the lock is still valid. If it is, bail.
      if ( $lock_result > ( time() - $release_timeout ) ) {
        return false;
      }

      // There must exist an expired lock, clear it and re-gain it.
      WP_Upgrader::WP_Upgrader::release_lock( $lock_name );

      return WP_Upgrader::WP_Upgrader::create_lock( $lock_name, $release_timeout );
    }

    // Update the lock, as by this point we've definitely got a lock, just need to fire the actions.
    update_option( $lock_option, time() );

    return true;
  }