Changeset 2846


Ignore:
Timestamp:
Aug 30, 2016, 2:48:33 PM (9 years ago)
Author:
bird
Message:

fixes

Location:
trunk/src
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/Makefile.kmk

    r2413 r2846  
    3434include $(PATH_SUB_CURRENT)/kObjCache/Makefile.kmk
    3535include $(PATH_SUB_CURRENT)/misc/Makefile.kmk
     36ifeq ($(KBUILD_TARGET),win)
     37 include $(PATH_SUB_CURRENT)/kLibTweaker/Makefile.kmk
     38 include $(PATH_SUB_CURRENT)/kWorker/Makefile.kmk
     39endif
    3640
    3741include $(FILE_KBUILD_SUB_FOOTER)
  • trunk/src/kWorker/kWorker.c

    r2844 r2846  
    38153815                    if (cbActually > cbToRead)
    38163816                        cbActually = cbToRead;
     3817                    else if (cbActually < cbToRead)
     3818                        ((KU8 *)pvBuffer)[cbActually] = '\0'; // hack hack hack
    38173819
    38183820                    kHlpMemCopy(pvBuffer, &pFsObj->pbCached[pHandle->offFile], cbActually);
     
    52435245    HANDLE  hPipe = INVALID_HANDLE_VALUE;
    52445246
     5247
    52455248    /*
    52465249     * Parse arguments.
  • trunk/src/kmk/job.c

    r2844 r2846  
    467467#else
    468468  if (exit_sig == 0)
     469# if defined(KMK) && defined(KBUILD_OS_WINDOWS)
     470    error (NILF, ignored ? _("[%s] Error %d (%#x) (ignored)") :
     471           _("*** [%s] Error %d (%#x)"),
     472           target_name, exit_code, exit_code);
     473# else
    469474    error (NILF, ignored ? _("[%s] Error %d (ignored)") :
    470475           _("*** [%s] Error %d"),
    471476           target_name, exit_code);
     477# endif
    472478  else
    473479    error (NILF, "*** [%s] %s%s",
  • trunk/src/kmk/kmkbuiltin.h

    r2844 r2846  
    6565extern int kSubmitSubProcGetResult(intptr_t pvUser, int *prcExit, int *piSigNo);
    6666extern int kSubmitSubProcKill(intptr_t pvUser, int iSignal);
     67extern void kSubmitSubProcCleanup(intptr_t pvUser);
    6768#endif
    6869extern int kmk_builtin_kDepIDB(int argc, char **argv, char **envp);
  • trunk/src/kmk/kmkbuiltin/kSubmit.c

    r2844 r2846  
    188188    else
    189189    {
    190         assert(pList->pHead == pWorker);
    191         pList->pHead = pPrev;
     190        assert(pList->pTail == pWorker);
     191        pList->pTail = pPrev;
    192192    }
    193193
     
    199199    else
    200200    {
    201         assert(pList->pTail == pWorker);
    202         pList->pTail = pNext;
    203     }
     201        assert(pList->pHead == pWorker);
     202        pList->pHead = pNext;
     203    }
     204
     205    assert(!pList->pHead || pList->pHead->pPrev == NULL);
     206    assert(!pList->pTail || pList->pTail->pNext == NULL);
    204207
    205208    assert(pList->cEntries > 0);
     
    235238        assert(pList->pHead == NULL);
    236239        pList->pHead = pWorker;
    237         pList->pTail = pWorker;
    238     }
     240    }
     241    pList->pTail = pWorker;
     242
     243    assert(pList->pHead->pPrev == NULL);
     244    assert(pList->pTail->pNext == NULL);
    239245
    240246    pList->cEntries++;
     
    954960        case STATUS_ILLEGAL_INSTRUCTION:        *piSigNo = SIGILL; break;
    955961    }
     962
    956963    return 0;
    957964}
     
    961968{
    962969    return -1;
     970}
     971
     972
     973/**
     974 * Called by process_cleanup when it's done with the worker.
     975 *
     976 * @param   pvUser              The worker instance.
     977 */
     978void kSubmitSubProcCleanup(intptr_t pvUser)
     979{
     980    PWORKERINSTANCE pWorker = (PWORKERINSTANCE)pvUser;
     981    kSubmitListUnlink(&g_BusyList, pWorker);
     982    kSubmitListAppend(&g_IdleList, pWorker);
    963983}
    964984
     
    15151535#ifdef KBUILD_OS_WINDOWS
    15161536            /* Quote the argv elements, but first we need unquoted pszExecute. */
    1517             char *pszFreeExec = NULL;
     1537            int const cArgs = argc - iArg;
     1538            int iArg2;
     1539            char **papszArgsOrg = (char **)xmalloc(sizeof(argv[0]) * cArgs);
    15181540            if (!pszExecutable)
    1519                 pszExecutable = pszFreeExec = xstrdup(argv[0]);
    1520             quote_argv(argc, argv, fWatcomBrainDamage, 1 /*fFreeOrLeak*/);
     1541                pszExecutable = argv[iArg];
     1542            memcpy(papszArgsOrg, &argv[iArg], sizeof(argv[0]) * cArgs);
     1543            quote_argv(cArgs, &argv[iArg], fWatcomBrainDamage, 0 /*fFreeOrLeak*/);
    15211544#endif
    15221545
     
    15301553
    15311554#ifdef KBUILD_OS_WINDOWS
    1532             free(pszFreeExec);
     1555            for (iArg2 = 0; iArg2 < cArgs; iArg2++)
     1556                if (argv[iArg2 + iArg] != papszArgsOrg[iArg2])
     1557                {
     1558                    free(argv[iArg2 + iArg]);
     1559                    argv[iArg2 + iArg] = papszArgsOrg[iArg2];
     1560                }
     1561            free(papszArgsOrg);
    15331562#endif
    15341563        }
  • trunk/src/kmk/w32/subproc/sub_proc.c

    r2844 r2846  
    218218
    219219                proc_array[proc_index++] = pSubProc;
    220                 *pPid = (HANDLE)pSubProc;
     220                *pPid = (intptr_t)pSubProc;
    221221                return 0;
    222222        }
     
    11231123#ifdef KMK
    11241124        } else if (pproc->enmType == kSubmit) {
    1125             /* nothing to do. */
     1125            kSubmitSubProcCleanup(pproc->clue);
    11261126        } else {
    11271127            assert(0);
Note: See TracChangeset for help on using the changeset viewer.