Changeset 3169 for trunk/src/kmk/w32


Ignore:
Timestamp:
Mar 21, 2018, 12:27:47 PM (7 years ago)
Author:
bird
Message:

kmk/win: Run kDepObj on worker thread.

Location:
trunk/src/kmk/w32
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/kmk/w32/winchildren.c

    r3165 r3169  
    109109#ifdef KMK
    110110    /** kmkbuiltin command. */
    111     WINCHILDTYPE_BUILTIN,
     111    WINCHILDTYPE_BUILT_IN,
    112112    /** kSubmit job. */
    113113    WINCHILDTYPE_SUBMIT,
     
    175175            HANDLE          hProcess;
    176176        } Process;
     177
     178        /** Data for WINCHILDTYPE_BUILT_IN.   */
     179        struct
     180        {
     181            /** The built-in command. */
     182            PCKMKBUILTINENTRY pBuiltIn;
     183            /** Number of arguments. */
     184            int             cArgs;
     185            /** Argument vector (single allocation, strings following array). */
     186            char          **papszArgs;
     187            /** Environment vector.  Only a copy if fEnvIsCopy is set. */
     188            char          **papszEnv;
     189        } BuiltIn;
    177190
    178191        /** Data for WINCHILDTYPE_SUBMIT.   */
     
    16431656 * @param   pChild              The kSubmit child.
    16441657 */
    1645 static void mkWinChildcareWorkerThreadHandleBuiltin(PWINCHILDCAREWORKER pWorker, PWINCHILD pChild)
    1646 {
    1647     /** @todo later.    */
    1648 __debugbreak();
     1658static void mkWinChildcareWorkerThreadHandleBuiltIn(PWINCHILDCAREWORKER pWorker, PWINCHILD pChild)
     1659{
     1660    PCKMKBUILTINENTRY pBuiltIn = pChild->u.BuiltIn.pBuiltIn;
     1661    if (pBuiltIn->uFnSignature == FN_SIG_MAIN)
     1662        pChild->iExitCode = pBuiltIn->u.pfnMain(pChild->u.BuiltIn.cArgs, pChild->u.BuiltIn.papszArgs, pChild->u.BuiltIn.papszEnv);
     1663    else if (pBuiltIn->uFnSignature == FN_SIG_MAIN_SPAWNS)
     1664        pChild->iExitCode = pBuiltIn->u.pfnMainSpawns(pChild->u.BuiltIn.cArgs, pChild->u.BuiltIn.papszArgs,
     1665                                                      pChild->u.BuiltIn.papszEnv, pChild->pMkChild, NULL);
     1666    else
     1667    {
     1668        assert(0);
     1669        pChild->iExitCode = 98;
     1670    }
    16491671}
    16501672
     
    17601782                        break;
    17611783#ifdef KMK
    1762                     case WINCHILDTYPE_BUILTIN:
    1763                         mkWinChildcareWorkerThreadHandleBuiltin(pWorker, pChild);
     1784                    case WINCHILDTYPE_BUILT_IN:
     1785                        mkWinChildcareWorkerThreadHandleBuiltIn(pWorker, pChild);
    17641786                        break;
    17651787                    case WINCHILDTYPE_SUBMIT:
     
    19691991
    19701992#ifdef KMK
    1971 
    1972         case WINCHILDTYPE_BUILTIN:
    1973             assert(0);
     1993        case WINCHILDTYPE_BUILT_IN:
     1994            if (pChild->u.BuiltIn.papszArgs)
     1995            {
     1996                free(pChild->u.BuiltIn.papszArgs);
     1997                pChild->u.BuiltIn.papszArgs = NULL;
     1998            }
     1999            if (pChild->u.BuiltIn.papszEnv)
     2000            {
     2001                free(pChild->u.BuiltIn.papszEnv);
     2002                pChild->u.BuiltIn.papszEnv = NULL;
     2003            }
    19742004            break;
    19752005
     
    19892019            }
    19902020            break;
    1991 
    19922021#endif /* KMK */
    19932022
     
    22302259
    22312260/**
     2261 * Interface used by kmkbuiltin.c for executing builtin commands on threads.
     2262 *
     2263 * @returns 0 on success, windows status code on failure.
     2264 * @param   pBuiltIn        The kmk built-in command entry.
     2265 * @param   cArgs           The number of arguments in papszArgs.
     2266 * @param   papszArgs       The argument vector.
     2267 * @param   papszEnv        The environment vector, optional.
     2268 * @param   pMkChild        The make child structure.
     2269 * @param   pPid            Where to return the pid.
     2270 */
     2271int MkWinChildCreateBuiltIn(PCKMKBUILTINENTRY pBuiltIn, int cArgs, char **papszArgs, char **papszEnv,
     2272                            struct child *pMkChild, pid_t *pPid)
     2273{
     2274    size_t    cbIgnored;
     2275    PWINCHILD pChild = mkWinChildNew(WINCHILDTYPE_BUILT_IN);
     2276    pChild->pMkChild            = pMkChild;
     2277    pChild->u.BuiltIn.pBuiltIn  = pBuiltIn;
     2278    pChild->u.BuiltIn.cArgs     = cArgs;
     2279    pChild->u.BuiltIn.papszArgs = mkWinChildCopyStringArray(papszArgs, &cbIgnored);
     2280    pChild->u.BuiltIn.papszEnv  = papszEnv ? mkWinChildCopyStringArray(papszEnv, &cbIgnored) : NULL;
     2281    return mkWinChildPushToCareWorker(pChild, pPid);
     2282}
     2283
     2284/**
    22322285 * Interface used by kSubmit.c for registering stuff to wait on.
    22332286 *
     
    22992352                    break;
    23002353
    2301                 case WINCHILDTYPE_BUILTIN:
     2354                case WINCHILDTYPE_BUILT_IN:
    23022355                    break;
    23032356
     
    23642417            break;
    23652418#ifdef KMK
    2366         case WINCHILDTYPE_BUILTIN:
     2419        case WINCHILDTYPE_BUILT_IN:
    23672420            break;
    23682421        case WINCHILDTYPE_SUBMIT:
  • trunk/src/kmk/w32/winchildren.h

    r3159 r3169  
    2727#define INCLUDED_WINCHILDREN_H
    2828
    29 void    MkWinChildInit(unsigned int cJobSlot);
    30 void    MkWinChildReExecMake(char **papszArgs, char **papszEnv);
     29
     30void    MkWinChildInit(unsigned int cJobSlot);
     31void    MkWinChildReExecMake(char **papszArgs, char **papszEnv);
    3132intptr_t MkWinChildGetCompleteEventHandle(void);
    3233int     MkWinChildCreate(char **papszArgs, char **papszEnv, const char *pszShell, struct child *pMkChild, pid_t *pPid);
    3334int     MkWinChildCreateWithStdOutPipe(char **papszArgs, char **papszEnv, int fdErr, pid_t *pPid, int *pfdReadPipe);
     35#ifdef KMK
     36struct KMKBUILTINENTRY;
     37int     MkWinChildCreateBuiltIn(struct KMKBUILTINENTRY const *pBuiltIn, int cArgs, char **papszArgs,
     38                                char **papszEnv, struct child *pMkChild, pid_t *pPid);
    3439int     MkWinChildCreateSubmit(intptr_t hEvent, void *pvSubmitWorker, pid_t *pPid);
    3540int     MkWinChildCreateRedirect(intptr_t hProcess, pid_t *pPid);
     41#endif
    3642int     MkWinChildKill(pid_t pid, int iSignal, struct child *pMkChild);
    3743int     MkWinChildWait(int fBlock, pid_t *pPid, int *piExitCode, int *piSignal, int *pfCoreDumped, struct child **ppMkChild);
Note: See TracChangeset for help on using the changeset viewer.