query( $wpdb->prepare( "INSERT IGNORE INTO {$wpdb->options} (option_name, option_value, autoload) VALUES (%s, %s, 'no')", $name, $until ) ); if ( 1 !== $inserted ) { // Held by someone. Take it over only if it has expired; if two requests try, one UPDATE matches. $taken = $wpdb->query( $wpdb->prepare( "UPDATE {$wpdb->options} SET option_value = %s WHERE option_name = %s AND CAST(option_value AS UNSIGNED) < %d", $until, $name, $now ) ); } // phpcs:enable self::forget_cached( $name ); return 1 === $inserted || ( isset( $taken ) && 1 === $taken ); } /** * @param string $name Option name. * @return void */ public static function release( $name ) { delete_option( $name ); self::forget_cached( $name ); } /** * @param string $name Option name. * @return void */ private static function forget_cached( $name ) { wp_cache_delete( $name, 'options' ); $missing = wp_cache_get( 'notoptions', 'options' ); if ( is_array( $missing ) && isset( $missing[ $name ] ) ) { unset( $missing[ $name ] ); wp_cache_set( 'notoptions', $missing, 'options' ); } } }