When a process is de-configuring a log file, also stop all of its
PMCs that require a log file to operate. This change should fix PR 90269. PR: kern/90269 MFC after: 1 week
This commit is contained in:
parent
c53e537a13
commit
fc9a2b80c4
@ -619,10 +619,8 @@ pmclog_deconfigure_log(struct pmc_owner *po)
|
||||
if ((po->po_flags & PMC_PO_OWNS_LOGFILE) == 0)
|
||||
return EINVAL;
|
||||
|
||||
/* remove this owner from the global SS pmc owner list */
|
||||
if (po->po_sscount)
|
||||
LIST_REMOVE(po, po_ssnext);
|
||||
|
||||
KASSERT(po->po_sscount == 0,
|
||||
("[pmc,%d] po=%p still owning SS PMCs", __LINE__, po));
|
||||
KASSERT(po->po_file != NULL,
|
||||
("[pmc,%d] po=%p no log file", __LINE__, po));
|
||||
|
||||
|
@ -2408,6 +2408,7 @@ pmc_syscall_handler(struct thread *td, void *syscall_args)
|
||||
|
||||
case PMC_OP_CONFIGURELOG:
|
||||
{
|
||||
struct pmc *pm;
|
||||
struct pmc_owner *po;
|
||||
struct pmc_op_configurelog cl;
|
||||
struct proc *p;
|
||||
@ -2436,8 +2437,12 @@ pmc_syscall_handler(struct thread *td, void *syscall_args)
|
||||
else if (po->po_flags & PMC_PO_OWNS_LOGFILE) {
|
||||
pmclog_process_closelog(po);
|
||||
error = pmclog_flush(po);
|
||||
if (error == 0)
|
||||
if (error == 0) {
|
||||
LIST_FOREACH(pm, &po->po_pmcs, pm_next)
|
||||
if (pm->pm_flags & PMC_F_NEEDS_LOGFILE)
|
||||
pmc_stop(pm);
|
||||
error = pmclog_deconfigure_log(po);
|
||||
}
|
||||
} else
|
||||
error = EINVAL;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user