diff --git a/app/Controllers/Opd_prescription.php b/app/Controllers/Opd_prescription.php index 76c5433..8a4781b 100644 --- a/app/Controllers/Opd_prescription.php +++ b/app/Controllers/Opd_prescription.php @@ -5203,7 +5203,7 @@ class Opd_prescription extends BaseController . ' btn.disabled=true;btn.innerHTML=\'Submitting\u2026\';' . ' const body=new URLSearchParams({opd_id:CTX.opdId,opd_session_id:CTX.sessionId});' . ' body.append(CSRF_NAME,CSRF_HASH);' - . ' const submitTimeoutMs=45000;' + . ' const submitTimeoutMs=150000;' . ' const submitController=new AbortController();' . ' const submitTimer=setTimeout(()=>submitController.abort(),submitTimeoutMs);' . ' fetch(SUBMIT_URL,{method:"POST",headers:{"X-Requested-With":"XMLHttpRequest","Content-Type":"application/x-www-form-urlencoded"},body:body.toString(),signal:submitController.signal})' @@ -5365,6 +5365,20 @@ class Opd_prescription extends BaseController $cookieHeader = (string) $this->request->getHeaderLine('Cookie'); $handoffTimeoutSec = $this->resolveFhirGatewayHandoffTimeoutSec(); + // Avoid self-call deadlock: this request forwards the same session cookie + // to an internal endpoint protected by permission filter. + // Releasing session lock allows the internal request to proceed. + try { + $session = session(); + if (is_object($session) && method_exists($session, 'close')) { + $session->close(); + } elseif (function_exists('session_write_close') && session_status() === PHP_SESSION_ACTIVE) { + session_write_close(); + } + } catch (\Throwable $sessionCloseError) { + log_message('warning', '[fhir_bundle_submit] could not close session lock before handoff for OPD#' . $opdId . ': ' . $sessionCloseError->getMessage()); + } + $client = service('curlrequest', [ 'timeout' => $handoffTimeoutSec, 'connect_timeout' => 10, diff --git a/app/Views/abdm/task_board.php b/app/Views/abdm/task_board.php index f9ec181..5e1383f 100644 --- a/app/Views/abdm/task_board.php +++ b/app/Views/abdm/task_board.php @@ -2179,7 +2179,7 @@ btn.textContent = 'Submitting…'; var body = new URLSearchParams({ opd_id: _fhirOpdId, opd_session_id: _fhirSessionId }); body.append(csrfName, csrfHash); - var submitTimeoutMs = 45000; + var submitTimeoutMs = 150000; var submitController = new AbortController(); var submitTimer = window.setTimeout(function () { submitController.abort(); }, submitTimeoutMs); fetch('', {