It's a classic debugging error to decide the problem can't possibly be in a certain place.
OK, let's say you're correct. Comment out the welcome() call and put something like "printf("Welcome call was here\n"); immediately after it. Does it still go wrong?
Unfortunately you forgot to post the welcome() code so I can't check you're correct.