Hmm. It happens with a hasty space but not with a regular space? With or without threads enabled?
So add: does a regular cpSpaceAdd*() call. It will throw an error if you attempt to do so inside of a collision callback or such. To do that, you need to schedule a post-step callback using the object to add as the key which will call your code right before the controlling cpSpace function returns (cpSpaceStep(), cpSpaceQuery*(), etc.). smartAdd: calls add: if you aren't in a callback, and schedules a post-step callback to do it if you are. Using smartAdd: all the time is a decent best practice, unless you are certain that you don't want a post-step callback scheduled. It's more relevant with smartRemove: where you know that using the object to be removed as a key will interfere with another post-step callback.
More in the docs: http://chipmunk-physics.net/release/Chi ... space.html