diff --git a/src/gausskernel/process/postmaster/pgaudit.cpp b/src/gausskernel/process/postmaster/pgaudit.cpp index 1c32aa2a0..89ac684e3 100755 --- a/src/gausskernel/process/postmaster/pgaudit.cpp +++ b/src/gausskernel/process/postmaster/pgaudit.cpp @@ -1160,11 +1160,15 @@ static void pgaudit_write_file(char* buffer, int count) /* if record time is earlier than current file's create time, * create a new audit file to avoid the confusion caused by system clock change */ FILE* fh = NULL; + LWLockAcquire(AuditIndexFileLock, LW_SHARED); + bool haslock = true; if (g_instance.audit_cxt.audit_indextbl) { AuditIndexItem *cur_item = g_instance.audit_cxt.audit_indextbl->data + g_instance.audit_cxt.audit_indextbl->curidx[t_thrd.audit.cur_thread_idx]; if (curtime < cur_item->ctime) { + LWLockRelease(AuditIndexFileLock); + haslock = false; auditfile_close(SYSAUDITFILE_TYPE); fh = auditfile_open((pg_time_t)time(NULL), "a", true); if (fh != NULL) { @@ -1174,6 +1178,9 @@ static void pgaudit_write_file(char* buffer, int count) } uint32 retry_cnt = 0; + if (haslock) { + LWLockRelease(AuditIndexFileLock); + } retry1: rc = fwrite(buffer, 1, count, t_thrd.audit.sysauditFile);