mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-10-30 22:07:57 +01:00 
			
		
		
		
	RateLimitInterceptor: ignore canceled calls (#7389)
* RateLimitInterceptor: ignore canceled calls
* SpecificHostRateLimit: ignore canceled calls
(cherry picked from commit 5b8cd68cf3)
			
			
This commit is contained in:
		| @@ -4,6 +4,7 @@ import android.os.SystemClock | ||||
| import okhttp3.Interceptor | ||||
| import okhttp3.OkHttpClient | ||||
| import okhttp3.Response | ||||
| import java.io.IOException | ||||
| import java.util.concurrent.TimeUnit | ||||
|  | ||||
| /** | ||||
| @@ -36,6 +37,11 @@ private class RateLimitInterceptor( | ||||
|     private val rateLimitMillis = unit.toMillis(period) | ||||
|  | ||||
|     override fun intercept(chain: Interceptor.Chain): Response { | ||||
|         // Ignore canceled calls, otherwise they would jam the queue | ||||
|         if (chain.call().isCanceled()) { | ||||
|             throw IOException() | ||||
|         } | ||||
|  | ||||
|         synchronized(requestQueue) { | ||||
|             val now = SystemClock.elapsedRealtime() | ||||
|             val waitTime = if (requestQueue.size < permits) { | ||||
| @@ -51,6 +57,11 @@ private class RateLimitInterceptor( | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             // Final check | ||||
|             if (chain.call().isCanceled()) { | ||||
|                 throw IOException() | ||||
|             } | ||||
|  | ||||
|             if (requestQueue.size == permits) { | ||||
|                 requestQueue.removeAt(0) | ||||
|             } | ||||
|   | ||||
| @@ -5,6 +5,7 @@ import okhttp3.HttpUrl | ||||
| import okhttp3.Interceptor | ||||
| import okhttp3.OkHttpClient | ||||
| import okhttp3.Response | ||||
| import java.io.IOException | ||||
| import java.util.concurrent.TimeUnit | ||||
|  | ||||
| /** | ||||
| @@ -41,9 +42,13 @@ class SpecificHostRateLimitInterceptor( | ||||
|     private val host = httpUrl.host | ||||
|  | ||||
|     override fun intercept(chain: Interceptor.Chain): Response { | ||||
|         if (chain.request().url.host != host) { | ||||
|         // Ignore canceled calls, otherwise they would jam the queue | ||||
|         if (chain.call().isCanceled()) { | ||||
|             throw IOException() | ||||
|         } else if (chain.request().url.host != host) { | ||||
|             return chain.proceed(chain.request()) | ||||
|         } | ||||
|  | ||||
|         synchronized(requestQueue) { | ||||
|             val now = SystemClock.elapsedRealtime() | ||||
|             val waitTime = if (requestQueue.size < permits) { | ||||
| @@ -59,6 +64,11 @@ class SpecificHostRateLimitInterceptor( | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             // Final check | ||||
|             if (chain.call().isCanceled()) { | ||||
|                 throw IOException() | ||||
|             } | ||||
|  | ||||
|             if (requestQueue.size == permits) { | ||||
|                 requestQueue.removeAt(0) | ||||
|             } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user