Changeset 1582


Ignore:
Timestamp:
Oct 12, 2004, 12:56:56 AM (21 years ago)
Author:
bird
Message:

Fixed two fork related bugs.

Location:
trunk/src/emx/src/lib/sys
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/emx/src/lib/sys/DosAllocMemEx.c

    • Property cvs2svn:cvs-rev changed from 1.2 to 1.3
    r1581 r1582  
    4545*******************************************************************************/
    4646static int allocAtAddress(void *pvReq, ULONG cbReq, ULONG fReq);
     47#ifdef DEBUG_ME
     48static void dumpMemFlags(void *pvIn);
     49#endif
     50
    4751
    4852
     
    8286     */
    8387    FS_SAVE_LOAD();
     88#ifdef DEBUG_ME
     89    LIBCLOG_MSG2("Before:\n");
     90    if (flFlags & OBJ_LOCATION)
     91        dumpMemFlags(*ppv);
     92    else if (flFlags & OBJ_ANY)
     93        dumpMemFlags((void *)0x20000001);
     94    else
     95        dumpMemFlags((void *)0x10000001);
     96#endif
    8497    if (flFlags & OBJ_LOCATION)
    8598        rc = allocAtAddress(*ppv, cb, flFlags & ~(OBJ_LOCATION | OBJ_FORK));
    8699    else
    87100        rc = DosAllocMem(ppv, cb, flFlags & ~(OBJ_FORK));
     101#ifdef DEBUG_ME
     102    LIBCLOG_MSG2("After:\n");
     103    dumpMemFlags(*ppv);
     104#endif
    88105    if (rc)
    89106    {
     
    193210            }
    194211
    195             rc = DosAllocMem(pvNew, cbReq, fReq);
     212            rc = DosAllocMem(&pvNew, cbReq, fReq);
    196213            if (rc || (char *)pvNew > (char *)pvReq)
    197214                break; /* we failed! */
     
    222239}
    223240
     241#ifdef DEBUG_ME
     242/**
     243 * Dumps the flags of a memory region.
     244 * @param   pv      Address in that region.
     245 */
     246static void dumpMemFlags(void *pvIn)
     247{
     248    LIBCLOG_MSG2("address  size     flags (dumpMemFlags)\n");
     249    void *pv    = (uintptr_t)pvIn < 0x20000000 ?  (char *)0x10000 : (char *)0x20000000;
     250    void *pvMax = (uintptr_t)pvIn < 0x20000000 ?  (char *)0x20000000 : (char *)0xc0000000;
     251    int fLastErr = 0;
     252    while ((uintptr_t)pv < (uintptr_t)pvMax)
     253    {
     254        ULONG flRegion = ~0;
     255        ULONG cbRegion = ~0;
     256        APIRET rc = DosQueryMem(pv, &cbRegion, &flRegion);
     257        if (!rc)
     258        {
     259            LIBCLOG_MSG2("%08lx %08lx %08lx\n", (ULONG)pv, cbRegion, flRegion);
     260            pv = (char *)pv + ((cbRegion + 0xfff) & ~0xfff);
     261            fLastErr = 0;
     262        }
     263        else
     264        {
     265            if (!fLastErr)
     266                LIBCLOG_MSG2("%08lx rc=%ld\n", (ULONG)pv, rc);
     267            fLastErr = 1;
     268            pv = (char *)(((uintptr_t)pv + 0x1fff) & ~0xfff);
     269        }
     270    }
     271}
     272#endif
  • trunk/src/emx/src/lib/sys/DosEx.c

    • Property cvs2svn:cvs-rev changed from 1.4 to 1.5
    r1581 r1582  
    976976{
    977977    int rc;
    978     rc = DosAllocMemEx(&pEntry->u.MemAlloc.pv, pEntry->u.MemAlloc.cb, pEntry->u.MemAlloc.flFlags);
    979     LIBC_ASSERTM(!rc, "DosAllocMemEx(={%p},%#lx,%#lx) -> rc=%d\n",
     978    rc = DosAllocMemEx(&pEntry->u.MemAlloc.pv, pEntry->u.MemAlloc.cb, (pEntry->u.MemAlloc.flFlags & ~OBJ_FORK) | OBJ_LOCATION);
     979    LIBC_ASSERTM(!rc, "DosAllocMemEx(={%p},%#lx,%#lx | OBJ_LOCATION) -> rc=%d\n",
    980980                 pEntry->u.MemAlloc.pv, pEntry->u.MemAlloc.cb, pEntry->u.MemAlloc.flFlags, rc);
    981981    if (rc)
  • trunk/src/emx/src/lib/sys/libcfork.c

    • Property cvs2svn:cvs-rev changed from 1.5 to 1.6
    r1581 r1582  
    134134static int                  forkBthCallbacksCompare(const void *pv1, const void *pv2);
    135135static int                  forkBthCallbacksCall(__LIBC_PFORKCALLBACK *papCallbacks, __LIBC_PFORKHANDLE pForkHandle, __LIBC_FORKOP enmOperation);
     136static void                 forkBthDumpMemFlags(void *pv);
     137
    136138
    137139
     
    20582060                if (rc)
    20592061                {
     2062                    forkBthDumpMemFlags(pChunk->pv);
    20602063                    LIBC_ASSERTM_FAILED("DosSetMem(%p, %08x, %08lx) failed with rc=%d\n", pChunk->pv, pChunk->cbVirt, flFlags, rc);
    20612064                    rc = -__libc_native2errno(rc);
     
    24332436}
    24342437
     2438/**
     2439 * Dumps the flags of a memory region.
     2440 * @param   pv      Address in that region.
     2441 */
     2442static void forkBthDumpMemFlags(void *pvIn)
     2443{
     2444#if 0
     2445    LIBCLOG_MSG2("address  size     flags (forkBthDumpMemFlags)\n");
     2446    void *pv    = (uintptr_t)pvIn < 0x20000000 ?  (char *)0x10000 : (char *)0x20000000;
     2447    void *pvMax = (uintptr_t)pvIn < 0x20000000 ?  (char *)0x20000000 : (char *)0xc0000000;
     2448    int fLastErr = 0;
     2449    while ((uintptr_t)pv < (uintptr_t)pvMax)
     2450    {
     2451        ULONG flRegion = ~0;
     2452        ULONG cbRegion = ~0;
     2453        APIRET rc = DosQueryMem(pv, &cbRegion, &flRegion);
     2454        if (!rc)
     2455        {
     2456            LIBCLOG_MSG2("%08lx %08lx %08lx\n", (ULONG)pv, cbRegion, flRegion);
     2457            pv = (char *)pv + ((cbRegion + 0xfff) & ~0xfff);
     2458            fLastErr = 0;
     2459        }
     2460        else
     2461        {
     2462            if (!fLastErr)
     2463                LIBCLOG_MSG2("%08lx rc=%ld\n", (ULONG)pv, rc);
     2464            fLastErr = 1;
     2465            pv = (char *)(((uintptr_t)pv + 0x1fff) & ~0xfff);
     2466        }
     2467    }
     2468#endif
     2469}
     2470
Note: See TracChangeset for help on using the changeset viewer.