add invoke_user_callback function