From owner-freebsd-arch Mon Aug 26 17:45:13 2002 Delivered-To: freebsd-arch@freebsd.org Received: from mx1.FreeBSD.org (mx1.FreeBSD.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 888E137B405 for ; Mon, 26 Aug 2002 17:45:06 -0700 (PDT) Received: from InterJet.dellroad.org (adsl-63-194-81-26.dsl.snfc21.pacbell.net [63.194.81.26]) by mx1.FreeBSD.org (Postfix) with ESMTP id D5B8D43E6E for ; Mon, 26 Aug 2002 17:45:05 -0700 (PDT) (envelope-from archie@dellroad.org) Received: from arch20m.dellroad.org (arch20m.dellroad.org [10.1.1.20]) by InterJet.dellroad.org (8.9.1a/8.9.1) with ESMTP id RAA38284; Mon, 26 Aug 2002 17:41:43 -0700 (PDT) Received: (from archie@localhost) by arch20m.dellroad.org (8.11.6/8.11.6) id g7R0ehu36981; Mon, 26 Aug 2002 17:40:43 -0700 (PDT) (envelope-from archie) From: Archie Cobbs Message-Id: <200208270040.g7R0ehu36981@arch20m.dellroad.org> Subject: Re: Process/thread states. In-Reply-To: "from Julian Elischer at Aug 26, 2002 04:42:55 pm" To: Julian Elischer Date: Mon, 26 Aug 2002 17:40:43 -0700 (PDT) Cc: arch@FreeBSD.ORG X-Mailer: ELM [version 2.4ME+ PL88 (25)] MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII Sender: owner-freebsd-arch@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG Julian Elischer writes: > #define TD_ST_SUSPQ 0x01 /* uses runq field */ > #define TD_ST_RUNQ 0x02 /* uses runq field */ > #define TD_ST_RUNNING 0x03 /* uses no (virtual) field */ > #define TD_ST_MTX 0x04 /* uses mtx field */ > #define TD_ST_RQ_MASK 0x07 /* mask of non sleep states */ > #define TD_ST_SLPQ 0x08 /* uses slpq field */ > enum thread_state { > TDS_UNQUEUED = 0x00, > TDS_SLP = TD_ST_SLPQ, > TDS_RUNQ = TD_ST_RUNQ, > TDS_RUNNING = TD_ST_RUNNING, > TDS_SUSPENDED = TD_ST_SUSPQ, > TDS_MTX = TD_ST_MTX, > TDS_SUSP_SLP = TD_ST_SUSPQ|TD_ST_SLPQ, > TDS_RUN_SLP = TD_ST_RUNNING|TD_ST_SLPQ, > TDS_RUNQ_SLP = TD_ST_RUNQ|TD_ST_SLPQ, > TDS_MTX_SLP = TD_ST_MTX|TD_ST_SLPQ, > TDS_SWAPPING = TD_ST_SLPQ|TD_ST_RQ_MASK + 1, > TDS_IWAIT, /* needed? */ > TDS_SURPLUS /* needed? */ > }; I like your idea.. it makes things clearer because they are more explicit. Whenever "implicit developer knowledge" is required to do something correctly that's more opportunity for bugs. If you comment those flags in the header file(s) really well, that's even better. Especially all of the cases where there is any duplicate or inter-dependent state, which can be evil. E.g., if TDS_SLP always implies wchan != NULL, then that should be commented somewhere. That is, any 'trickiness' in an object's state like depedence between fields or special invariants should either be very clearly documented or else hidden behind an object-like functional interface (like Alfred suggested). -Archie __________________________________________________________________________ Archie Cobbs * Packet Design * http://www.packetdesign.com To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-arch" in the body of the message