As the title says, touch_start() won't fire until the second click if the object is already being touched. Here's some quick demo code:
default
{
touch_start(integer num) {
llOwnerSay("touch_start(): " + (string)num);
}
touch(integer num) {
llSetText("touch(): " + (string)num, <1.0, 1.0, 1.0>, 1.0);
}
}
Detailed scenario:
  • User#1 clicks the prim and keeps their mouse button held,
  • touch_start() outputs the correct number of 1 new touches,
  • touch() outputs the correct number of 1 continuous touches,
  • User#2 clicks the prim and keeps their mouse button held,
  • touch_start() does not output anything.
  • touch() outputs 2 continuous touches,
  • User#2 releases their mouse button and clicks again
  • touch_start() now outputs 1 new touches,
  • touch() outputs 2 continuous touches.
I discovered this while coding authentication for a touchable object.
The alternative is to do authentication directly in touch() which will cripple performance as it will needlessly be validating unauthenticated users' access over and over whilst touched.