Hmm, is this actually threadsafe? You could have:

    1 g.clientRequests <- id
    2 g.clientRequests <- id
    2 return <-g.clientResponses
    1 return <-g.clientResponses

(where 1 and 2 correspond to different threads)

This would cause thread 2 to get the client requested by thread 1, and vice versa, wouldn't it?