We had a job today that hanged on a utl_http.request() call... the server it called seems to have hung while generating the request, but no timeout exception occurred (the current receive timeout is the default, 60 seconds). That job waited for hours for the request to come back before we noticed and killed it.
A dozen or so other jobs (that also make the same utl_http.request call) indicated they were blocked - the blocking session was the first hung one. v$locked_object had no records, so it isn't clear why those other sessions thought the first one was blocking them. They all say "library cache load lock" for the session event.
After we killed the first session, the other jobs ran to completion (albeit with a TNS: No Listener error on the utl_http call).
Is there something about utl_http.request() that only one call to the server/address may be made from the same instance at once? (Bonus points for theories on why the timeout never kicked in for any of the sessions).