--- Quote Start ---
So from this im guessing that when I call the procedure concurrently, every time the inputs change and the procedure gets re-evaluated the variable is getting re-initialised. in the case of the state machine this is meaning that it keeps getting re-initialised to check_empty so the state machine isnt transitioning and in my second procedure rdreq_ip is always being re-intialised to 0 and is never able to clear rdreq.
--- Quote End ---
Its all a question of scope. Calling a procedure the way you have done, or any code outside a process, implicitly declares a process.
Procedures and functions are supposed to be re-useble, but self contained bits of code.