| Type |
Bug
|
| Priority |
Normal
|
| Assignee | |
| Affected Versions |
17.0.2 (observed), 17.1.1 (verified in source)
|
| Labels |
No labels
|
Issue Votes (0)
| Type |
Bug
|
| Priority |
Normal
|
| Assignee | |
| Affected Versions |
17.0.2 (observed), 17.1.1 (verified in source)
|
| Labels |
No labels
|
Observed on OneDev Server 17.0.2 (JGit 7.8.0, Java 25.0.4.1). The same loop is present in the 17.1.1 source.
Minimal service-level reproduction
src/keep.txt. Leavesrc/missingabsent.revIdand callgitService.getClosestPath(project, revId, "src/missing/File.java"). Run the test in a disposable JVM with an external timeout."src", the nearest existing ancestor. Actual lookup sequence from the installed bytecode:src/missing/File.java→src/missing→src/missing→ … . The call cannot reachsrc.The lookup tests
currentPath, but both the slash check and the parent calculation use the originalpath. After the first miss the loop keeps assigning the same value tocurrentPath. Computing the parent fromcurrentPathon each iteration should also allow the existingnullfallback to be reached when no ancestor exists.Runtime evidence
A single runnable Hazelcast executor thread accumulated 40.26 hours of CPU over 41.49 hours elapsed (0.97 of one logical CPU on average). Repeated 10-second Linux per-thread samples measured about 0.99 CPU; a separate 5-second sample measured 0.94. Two JVM thread dumps showed the same worker in this call chain (excerpt, infrastructure identifiers omitted):
The live request's path and revision were not captured. The synthetic path above illustrates the termination defect independently of that request.