ABDM submit: release session lock before internal handoff and extend client timeout

This commit is contained in:
DevSoftTech Server 2026-06-26 16:39:53 +05:30
parent a23d1f215a
commit e7e5cf88e7
2 changed files with 16 additions and 2 deletions

View File

@ -5203,7 +5203,7 @@ class Opd_prescription extends BaseController
. ' btn.disabled=true;btn.innerHTML=\'<span class="spinner-border spinner-border-sm me-1"></span>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,

View File

@ -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('<?= base_url('Opd_prescription/fhir_bundle_submit') ?>', {