http: don't emit data({}) early
data({}) denotes end of data and may cause a job finish (though I haven't actually found the code where that happens). the trouble is that our metadata is only set up later so the job isn't actually finished by the time our data emission happened.
instead make sure to delay the final data emission on function unwind when metadata is actually complete