|
8 | 8 | use Illuminate\Routing\Route;
|
9 | 9 | use Illuminate\Session\SessionManager;
|
10 | 10 | use Illuminate\Support\Carbon;
|
| 11 | +use Illuminate\Support\Facades\Cache; |
11 | 12 | use Illuminate\Support\Facades\Date;
|
12 | 13 | use Leantime\Core\Eventhelpers;
|
13 | 14 | use Leantime\Core\IncomingRequest;
|
@@ -63,15 +64,38 @@ public function handle(IncomingRequest $request, Closure $next)
|
63 | 64 |
|
64 | 65 | self::dispatch_event('session_initialized');
|
65 | 66 |
|
66 |
| - /* Handle blocking sessions |
67 |
| - if ( |
68 |
| - $this->manager->shouldBlock() || |
69 |
| - ($request->route() instanceof Route && $request->route()->locksFor()) |
70 |
| - ) { |
71 |
| - return $this->handleRequestWhileBlocking($request, $session, $next); |
| 67 | + //Enable session locking by default |
| 68 | + //We have too many async requests with session write requests creating all sorts of odd behavior |
| 69 | + //if session locking is not enabled |
| 70 | + return $this->handleRequestWhileBlocking($request, $session, $next); |
| 71 | + } |
| 72 | + |
| 73 | + /** |
| 74 | + * Handle the given request within session state. |
| 75 | + * |
| 76 | + * @param IncomingRequest $request |
| 77 | + * @param \Illuminate\Contracts\Session\Session $session |
| 78 | + * @param \Closure $next |
| 79 | + * @return mixed |
| 80 | + */ |
| 81 | + protected function handleRequestWhileBlocking(IncomingRequest $request, $session, Closure $next) { |
| 82 | + |
| 83 | + |
| 84 | + $lockFor = $this->manager->defaultRouteBlockLockSeconds(); |
| 85 | + |
| 86 | + $lock = Cache::store($this->manager->blockDriver()) |
| 87 | + ->lock('session:'.$session->getId(), $lockFor) |
| 88 | + ->betweenBlockedAttemptsSleepFor(50); |
| 89 | + |
| 90 | + try { |
| 91 | + $lock->block( |
| 92 | + $this->manager->defaultRouteBlockWaitSeconds() |
| 93 | + ); |
| 94 | + |
| 95 | + return $this->handleStatefulRequest($request, $session, $next); |
| 96 | + } finally { |
| 97 | + $lock?->release(); |
72 | 98 | }
|
73 |
| -*/ |
74 |
| - return $this->handleStatefulRequest($request, $session, $next); |
75 | 99 | }
|
76 | 100 |
|
77 | 101 |
|
|
0 commit comments