Changed sementics of thread_join. Past thread_join sets necessary parametes in data structures and resumes caller execution. So it was required to call thread_yield one time from caller thread to actually get blocked for target. Incase caller completes it's execution before timer expire, caller will be removed from queue and no use of calling thread_join.  Now thread_yield called internally from thread_join. This will stop caller's execution and resumes execution of most sutable next thread. Caller of thread_join will resume it's execution only when target thread completes