[ros-diffs] [cgutman] 49426: [LWIP] - Fix build and a few implementation bugs

cgutman at svn.reactos.org cgutman at svn.reactos.org
Tue Nov 2 04:57:38 UTC 2010


Author: cgutman
Date: Tue Nov  2 04:57:37 2010
New Revision: 49426

URL: http://svn.reactos.org/svn/reactos?rev=49426&view=rev
Log:
[LWIP]
- Fix build and a few implementation bugs

Modified:
    branches/tcp-rewrite-branch/lib/drivers/lwip/lwip.rbuild
    branches/tcp-rewrite-branch/lib/drivers/lwip/src/api/tcpip.c
    branches/tcp-rewrite-branch/lib/drivers/lwip/src/include/arch/sys_arch.h
    branches/tcp-rewrite-branch/lib/drivers/lwip/src/sys_arch.c

Modified: branches/tcp-rewrite-branch/lib/drivers/lwip/lwip.rbuild
URL: http://svn.reactos.org/svn/reactos/branches/tcp-rewrite-branch/lib/drivers/lwip/lwip.rbuild?rev=49426&r1=49425&r2=49426&view=diff
==============================================================================
--- branches/tcp-rewrite-branch/lib/drivers/lwip/lwip.rbuild [iso-8859-1] (original)
+++ branches/tcp-rewrite-branch/lib/drivers/lwip/lwip.rbuild [iso-8859-1] Tue Nov  2 04:57:37 2010
@@ -45,12 +45,12 @@
 				<file>ip_addr.c</file>
 				<file>ip_frag.c</file>
 			</directory>
-			<directory name="ipv6">
+			<!--directory name="ipv6">
 				<file>icmp6.c</file>
 				<file>inet6.c</file>
 				<file>ip6_addr.c</file>
 				<file>ip6.c</file>
-			</directory>
+			</directory-->
 			<directory name="snmp">
 				<file>asn1_dec.c</file>
 				<file>asn1_enc.c</file>

Modified: branches/tcp-rewrite-branch/lib/drivers/lwip/src/api/tcpip.c
URL: http://svn.reactos.org/svn/reactos/branches/tcp-rewrite-branch/lib/drivers/lwip/src/api/tcpip.c?rev=49426&r1=49425&r2=49426&view=diff
==============================================================================
--- branches/tcp-rewrite-branch/lib/drivers/lwip/src/api/tcpip.c [iso-8859-1] (original)
+++ branches/tcp-rewrite-branch/lib/drivers/lwip/src/api/tcpip.c [iso-8859-1] Tue Nov  2 04:57:37 2010
@@ -46,6 +46,7 @@
 #include "lwip/pbuf.h"
 #include "lwip/tcpip.h"
 #include "lwip/init.h"
+#include "lwip/ip.h"
 #include "netif/etharp.h"
 #include "netif/ppp_oe.h"
 

Modified: branches/tcp-rewrite-branch/lib/drivers/lwip/src/include/arch/sys_arch.h
URL: http://svn.reactos.org/svn/reactos/branches/tcp-rewrite-branch/lib/drivers/lwip/src/include/arch/sys_arch.h?rev=49426&r1=49425&r2=49426&view=diff
==============================================================================
--- branches/tcp-rewrite-branch/lib/drivers/lwip/src/include/arch/sys_arch.h [iso-8859-1] (original)
+++ branches/tcp-rewrite-branch/lib/drivers/lwip/src/include/arch/sys_arch.h [iso-8859-1] Tue Nov  2 04:57:37 2010
@@ -1,20 +1,21 @@
 /* ReactOS-Specific lwIP binding header - by Cameron Gutman */
 
 /* Implmentation specific structs */
-typedef KEVENT sys_sem_t;
+typedef struct _sys_sem_t
+{
+    KEVENT Event;
+    int Valid;
+} sys_sem_t;
 
 typedef struct _sys_mbox_t
 {
     KSPIN_LOCK Lock;
     LIST_ENTRY ListHead;
     KEVENT Event;
+    int Valid;
 } sys_mbox_t;
 
-typedef struct _sys_prot_t
-{
-    KSPIN_LOCK Lock;
-    KIRQL OldIrql;
-} sys_prot_t;
+typedef KIRQL sys_prot_t;
 
 typedef u32_t sys_thread_t;
 
@@ -35,10 +36,7 @@
 sys_arch_protect(sys_prot_t *lev);
 
 void
-sys_arch_unprotect(sys_prot_t *lev);
-
-void
-sys_arch_decl_protect(sys_prot_t *lev);
+sys_arch_unprotect(sys_prot_t lev);
 
 void
 sys_shutdown(void);

Modified: branches/tcp-rewrite-branch/lib/drivers/lwip/src/sys_arch.c
URL: http://svn.reactos.org/svn/reactos/branches/tcp-rewrite-branch/lib/drivers/lwip/src/sys_arch.c?rev=49426&r1=49425&r2=49426&view=diff
==============================================================================
--- branches/tcp-rewrite-branch/lib/drivers/lwip/src/sys_arch.c [iso-8859-1] (original)
+++ branches/tcp-rewrite-branch/lib/drivers/lwip/src/sys_arch.c [iso-8859-1] Tue Nov  2 04:57:37 2010
@@ -15,13 +15,10 @@
 
 typedef struct _thread_t
 {
-    PVOID ThreadId;
     HANDLE Handle;
-    struct sys_timeouts Timeouts;
     void (* ThreadFunction)(void *arg);
     void *ThreadContext;
     LIST_ENTRY ListEntry;
-    char Name[1];
 } *thread_t;
 
 u32_t sys_now(void)
@@ -36,23 +33,14 @@
 void
 sys_arch_protect(sys_prot_t *lev)
 {
-    KIRQL OldIrql;
-
-    KeAcquireSpinLock(&lev->Lock, &OldIrql);
-
-    lev->OldIrql = OldIrql;
-}
-
-void
-sys_arch_unprotect(sys_prot_t *lev)
-{
-    KeReleaseSpinLock(&lev->Lock, lev->OldIrql);
-}
-
-void
-sys_arch_decl_protect(sys_prot_t *lev)
-{
-    KeInitializeSpinLock(&lev->Lock);
+    /* Preempt the dispatcher */
+    KeRaiseIrql(DISPATCH_LEVEL, lev);
+}
+
+void
+sys_arch_unprotect(sys_prot_t lev)
+{
+    KeLowerIrql(lev);
 }
 
 err_t
@@ -64,21 +52,35 @@
      * so I optimize for this case by using a synchronization event and setting its initial state
      * to signalled for a lock and non-signalled for a completion event */
 
-    KeInitializeEvent(sem, SynchronizationEvent, count);
+    KeInitializeEvent(&sem->Event, SynchronizationEvent, count);
+    
+    sem->Valid = 1;
     
     return ERR_OK;
 }
 
+int sys_sem_valid(sys_sem_t *sem)
+{
+    return sem->Valid;
+}
+
+void sys_sem_set_invalid(sys_sem_t *sem)
+{
+    sem->Valid = 0;
+}
+
 void
 sys_sem_free(sys_sem_t* sem)
 {
     /* No op (allocated in stack) */
+    
+    sys_sem_set_invalid(sem);
 }
 
 void
 sys_sem_signal(sys_sem_t* sem)
 {
-    KeSetEvent(sem, IO_NO_INCREMENT, FALSE);
+    KeSetEvent(&sem->Event, IO_NO_INCREMENT, FALSE);
 }
 
 u32_t
@@ -87,7 +89,7 @@
     LARGE_INTEGER LargeTimeout, PreWaitTime, PostWaitTime;
     UINT64 TimeDiff;
     NTSTATUS Status;
-    PVOID WaitObjects[] = {sem, &TerminationEvent};
+    PVOID WaitObjects[] = {&sem->Event, &TerminationEvent};
 
     LargeTimeout.QuadPart = Int32x32To64(timeout, -10000);
     
@@ -131,15 +133,27 @@
     
     KeInitializeEvent(&mbox->Event, NotificationEvent, FALSE);
     
+    mbox->Valid = 1;
+    
     return ERR_OK;
 }
 
+int sys_mbox_valid(sys_mbox_t *mbox)
+{
+    return mbox->Valid;
+}
+
+void sys_mbox_set_invalid(sys_mbox_t *mbox)
+{
+    mbox->Valid = 0;
+}
+
 void
 sys_mbox_free(sys_mbox_t *mbox)
 {
     ASSERT(IsListEmpty(&mbox->ListHead));
     
-    /* No op (allocated on stack) */
+    sys_mbox_set_invalid(mbox);
 }
 
 void
@@ -236,43 +250,6 @@
     return ERR_OK;
 }
 
-struct sys_timeouts *sys_arch_timeouts(void)
-{
-    KIRQL OldIrql;
-    PLIST_ENTRY CurrentEntry;
-    thread_t Container;
-    
-    KeAcquireSpinLock(&ThreadListLock, &OldIrql);
-    CurrentEntry = ThreadListHead.Flink;
-    while (CurrentEntry != &ThreadListHead)
-    {
-        Container = CONTAINING_RECORD(CurrentEntry, struct _thread_t, ListEntry);
-        
-        if (Container->ThreadId == KeGetCurrentThread())
-        {
-            KeReleaseSpinLock(&ThreadListLock, OldIrql);
-            return &Container->Timeouts;
-        }
-        
-        CurrentEntry = CurrentEntry->Flink;
-    }
-    KeReleaseSpinLock(&ThreadListLock, OldIrql);
-    
-    Container = ExAllocatePool(NonPagedPool, sizeof(*Container));
-    if (!Container)
-        return SYS_ARCH_NULL;
-    
-    Container->Name[0] = ANSI_NULL;
-    Container->ThreadFunction = NULL;
-    Container->ThreadContext = NULL;
-    Container->Timeouts.next = NULL;
-    Container->ThreadId = KeGetCurrentThread();
-    
-    ExInterlockedInsertHeadList(&ThreadListHead, &Container->ListEntry, &ThreadListLock);
-    
-    return &Container->Timeouts;
-}
-
 VOID
 NTAPI
 LwipThreadMain(PVOID Context)
@@ -280,8 +257,6 @@
     thread_t Container = Context;
     KIRQL OldIrql;
     
-    Container->ThreadId = KeGetCurrentThread();
-    
     ExInterlockedInsertHeadList(&ThreadListHead, &Container->ListEntry, &ThreadListLock);
     
     Container->ThreadFunction(Container->ThreadContext);
@@ -301,14 +276,12 @@
     thread_t Container;
     NTSTATUS Status;
 
-    Container = ExAllocatePool(NonPagedPool, strlen(name) + sizeof(*Container));
+    Container = ExAllocatePool(NonPagedPool, sizeof(*Container));
     if (!Container)
         return 0;
 
-    strcpy(Container->Name, name);
     Container->ThreadFunction = thread;
     Container->ThreadContext = arg;
-    Container->Timeouts.next = NULL;
 
     Status = PsCreateSystemThread(&Container->Handle,
                                   THREAD_ALL_ACCESS,




More information about the Ros-diffs mailing list