| Function silc_fsm_thread_alloc
 
 SYNOPSIS
 
    SilcFSMThread silc_fsm_thread_alloc(SilcFSM fsm,
                                        void *thread_context,
                                        SilcFSMThreadDestructor destructor,
                                        void *destructor_context,
                                        SilcBool real_thread);
DESCRIPTION
    Allocates FSM thread context.  The thread will be executed in the
    FSM machine indicated by `fsm'.  The caller must free the returned
    thread context with silc_fsm_free.  If the 'real_thread' is TRUE
    then the thread will actually be executed in real thread, if platform
    supports them.  The `thread_context' is delivered to every state
    function in the thread.
NOTES
    If the system does not support threads, then this function will revert
    back to normal FSM threads.
    If the `real_thread' is TRUE then FSM will allocate new SilcSchedule
    for the FSM thread. If you need scheduler in the real thread it is
    strongly recommended that you use the SilcSchedule that is allocated
    for the thread.  You can retrieve the SilcSchedule from the thread
    using silc_fsm_get_schedule function.  Note that, the allocated
    SilcSchedule will become invalid after the thread finishes.
    If `real_thread' is FALSE the silc_fsm_get_schedule will return
    the SilcSchedule that was originally given to silc_fsm_alloc or
    silc_fsm_init.
EXAMPLE
    SILC_FSM_STATE(silc_foo_state)
    {
      SilcFSMThread thread;
      ...
      // Execute the route lookup in thread
      thread = silc_fsm_thread_alloc(fsm, fsm_context, NULL, NULL, FALSE);
      silc_fsm_start(thread, silc_route_lookup_start);
      // Wait here for the thread to terminate. Set the state where to go
      // after the thread has terminated.
      silc_fsm_next(fsm, silc_foo_route_lookup_finished);
      SILC_FSM_THREAD_WAIT(thread);
    }
 
 
 
 |