некоторые вещи (хотя, может быть, не все):
Нет необходимости в указателе хвоста, если список не связан дважды, потому что нет способа перейти от хвоста к голове (без предыдущего указателя)
Почему вы malloc в своей очереди на удаление?
*node = prHead;
prHead = prHead->next_prcmd;
--pending_request;
в add_queue вы должны node->next_prcmd = NULL;
, иначе вы никогда не узнаете конец.
снова, некоторые вещи, но, возможно, не все ...
Марио