first pass at updating head branch to be to be the same as the SAMBA_2_0 branch
[kai/samba.git] / source3 / architecture.doc
index afcec6d50a87d54a3aaaaa1738be04ad2790148b..eb29792bea0eed43a63bb8e0a7ff1e9e13d52d4e 100644 (file)
@@ -7,7 +7,7 @@ Quickly scrabbled together from odd bits of mail and memory. Please update.
 This document gives a general overview of how Samba works
 internally. The Samba Team has tried to come up with a model which is
 the best possible compromise between elegance, portability, security
-and the constraints imposed by the very message SMB and CIFS
+and the constraints imposed by the very messy SMB and CIFS
 protocol. 
 
 It also tries to answer some of the frequently asked questions such as:
@@ -105,17 +105,16 @@ nbmd Design
 Originally Andrew used recursion to simulate a multi-threaded
 environment, which use the stack enormously and made for really
 confusing debugging sessions. Luke Leighton rewrote it to use a
-queuing system that keeps state information on each packet. During the
-1.9.18 alpha series it was decided that this was too unwieldy to
-manage.  If the protocol was cleaner than it is then it would be OK
-but with the way the protocol works you really need some data hiding.
-The mistake we made was to transfer all the info from the packets to
-more specialised structures. It bit us badly when we then found we
-needed some detail of the original packet to handle some special
-case. The specialised structures kept growing till they almost
-contained all the info of the original packet! The code became
-extremely hairy, which became particularly evident when Jeremy fixed
-browsing on multiple subnets for 1.9.17.
+queuing system that keeps state information on each packet.  The
+first version used a single structure which was used by all the
+pending states.  As the initialisation of this structure was
+done by adding arguments, as the functionality developed, it got
+pretty messy.  So, it was replaced with a higher-order function
+and a pointer to a user-defined memory block.  This suddenly
+made things much simpler: large numbers of functions could be
+made static, and modularised.  This is the same principle as used
+in NT's kernel, and achieves the same effect as threads, but in
+a single process.
 
 Then Jeremy rewrote nmbd. The packet data in nmbd isn't what's on the
 wire. It's a nice format that is very amenable to processing but still