I might not understand what exactly is going on but it sounds like your system of calling perl to do things is not
reentrant.
Are you locking anything or would you be making anything available to be corrupted if you allowed multiple calls to perl?
I'm not sure what else would be a problem. What exactly do you mean by "calls"? Are any new child processes being created? Are the calls back to the C program made back to one process or is the C program run again (so there are multiple instances of it running)?