As I understand this, sub process must contain an end activity to be able to signal main process to move on.
So my idea was to check in signal method of SubProcessActivity if sub process instance is in state ended, if so signaling is allowed otherwise throw an exception.