Hi Gita
It may happen that somehow your "enqueue_read" FM encounters some unexpected exception (types you may not have defined) but the sy-subrc gets set to initial. In that case the dequeue_read FM will not get executed. So it would be better if you to keep the dequeue_read FM out of the sy-subrc condition.
To confirm the deletion of lock entries you can add a sy-subrc check after the FM.
Also there are other FMs available to enqueue and dequeue like
ENQUEUE_E_TABLEE
DEQUEUE_E_TABLEE ** both are used only if a particular table is to be used