in cmd/hotdog-hotpatch/main.go [322:354]
func runHotpatch(j *jvm) error {
version, ok := findVersion(j)
if !ok {
logger.Printf("Unsupported Java version %q for %d", version, j.pid)
return nil
}
patchPath := filepath.Join(hotdog.ContainerDir, hotdog.PatchPath)
var options []string
switch version {
case java17, java11:
options = append(jvmOpts, "-jar", patchPath, strconv.Itoa(j.pid))
case java8:
// Sometimes java is invoked as $JAVAHOME/jre/bin/java versus $JAVAHOME/bin/java, try to correct for this.
bindir := filepath.Dir(j.path)
basedir := filepath.Dir(bindir)
dirname := filepath.Base(basedir)
if dirname == "jre" {
basedir = filepath.Dir(basedir)
}
options = append(jvmOpts, "-cp", filepath.Join(basedir, "lib", "tools.jar")+":"+patchPath, hotdog.JDK8Class, strconv.Itoa(j.pid))
default:
return nil
}
out, err := commandDroppedPrivs(j.path, options, j.euid, j.egid, j.pid)
exitCode := 0
if err != nil {
if execErr, ok := err.(*exec.ExitError); ok {
exitCode = execErr.ExitCode()
}
}
logger.Printf("Patch exited %d: %q", exitCode, string(out))
return err
}