From owner-freebsd-hackers@FreeBSD.ORG Sat Dec 20 08:23:26 2008 Return-Path: Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 5DC5E1065670 for ; Sat, 20 Dec 2008 08:23:26 +0000 (UTC) (envelope-from fernercc@gmail.com) Received: from yw-out-2324.google.com (yw-out-2324.google.com [74.125.46.28]) by mx1.freebsd.org (Postfix) with ESMTP id 127728FC0C for ; Sat, 20 Dec 2008 08:23:25 +0000 (UTC) (envelope-from fernercc@gmail.com) Received: by yw-out-2324.google.com with SMTP id 9so1186107ywe.13 for ; Sat, 20 Dec 2008 00:23:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:subject:from:to:cc :in-reply-to:references:content-type:date:message-id:mime-version :x-mailer:content-transfer-encoding; bh=AdCpYZZqHmAHjTZ8XUS27f6P/xngpE7I7MLkl/F7QcM=; b=TGtq7ksWUYPmB9WA8YZK5VSnH46MIATUMUq3q1RAO/yMzkOYrViPWG88rT55juCEnh OaZhrsEuz8uWnqdd+FRLKEwyVjzY2cQ1E6i/MtLl0SUyzyAi2o88ah+odf/xeW16YpL6 3bpcPj0Lplc0mPPuxKYuZgQZlgS4vwyCU8zaU= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=subject:from:to:cc:in-reply-to:references:content-type:date :message-id:mime-version:x-mailer:content-transfer-encoding; b=BNeBsBWmxLmeppUSNXZ19MCNbDXThiKoZGEgcVCeBtzo9kUGn1N0Im1GzbW+TWMlFl 9CgoRrjbX1MGAkAkf8hIkm5klbU0fNlThBFv9b+A4QaedXQU5owfDIy8TBRUYzJ4DP1U GP+nD2sVsYPBhz3Ft0kdN7HvRPuj8Num88i64= Received: by 10.100.119.17 with SMTP id r17mr2775501anc.61.1229761405509; Sat, 20 Dec 2008 00:23:25 -0800 (PST) Received: from ?192.168.2.2? (cpe-70-112-179-136.austin.res.rr.com [70.112.179.136]) by mx.google.com with ESMTPS id c37sm2835289ana.57.2008.12.20.00.23.23 (version=TLSv1/SSLv3 cipher=RC4-MD5); Sat, 20 Dec 2008 00:23:24 -0800 (PST) From: Ferner Cilloniz To: Julian Elischer In-Reply-To: <494C8508.2020000@elischer.org> References: <1229726360.5614.15.camel@mobiliare.Belkin> <494C8246.3020703@elischer.org> <1229729326.5614.16.camel@mobiliare.Belkin> <494C8508.2020000@elischer.org> Content-Type: text/plain Date: Sat, 20 Dec 2008 02:23:20 +0000 Message-Id: <1229739800.5614.24.camel@mobiliare.Belkin> Mime-Version: 1.0 X-Mailer: Evolution 2.24.2 Content-Transfer-Encoding: 7bit Cc: freebsd-hackers@freebsd.org Subject: Re: adding proc to allproc X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 20 Dec 2008 08:23:26 -0000 The process comes from the allproc list. I am simply iterating through this list and removing the first 1/2 of allproc list and adding the removed process to my own singly linked list. LIST_REMOVE(current_proc, p_list); // remove from the allproc add_proc_entry(current_proc); Later, i am iterating through my singly linked list and doing the below: struct proc *p = current->p; f( p != NULL && (p->p_state == PRS_NEW || p->p_state == PRS_NORMAL) ){ LIST_INSERT_HEAD(&allproc, p, p_list); } Could this be causing a circular list? I am adding the proc entries to my singly linked list as follows: static void add_proc_entry(const struct proc *p) { struct proc_ll *new_entry = (struct proc_ll*)malloc(sizeof(struct proc_ll), M_TEMP, M_ZERO | M_NOWAIT); int done = 0; new_entry->p = p; // maybe doing this assignment isnt correct? if(proc_entries == NULL) { proc_entries = new_entry; return; } struct proc_ll *current = proc_entries; while(current != NULL) { if(current->next == NULL) { current->next = new_entry; break; } current = current->next; } } struct proc_ll { struct proc *p; struct proc_ll *next; }; A circular list does sound like it could cause hanging to occur but the above code, atleast from my eyes, doesn't seem to cause it. On Fri, 2008-12-19 at 21:39 -0800, Julian Elischer wrote: > Ferner Cilloniz wrote: > > When i run the code from a KLD it hangs the system. No reboot occurs > > however, it just hangs there. > > well, firstly you have no locking though that would probably let you > get away with it most times. > > Where does the process come from in the first place? > > It sounds like you are making a circular list somewhere or somehow... > > have you tried going into ddb? > > > > > > > > > > On Fri, 2008-12-19 at 21:27 -0800, Julian Elischer wrote: > >> Ferner Cilloniz wrote: > >>> Hello everyone. > >>> > >>> I am playing with freebsd and just learning some things about the > >>> FreeBSD kernel. > >>> > >>> So for my first quest i am placing random processes from the allproc > >>> list into a list of my own and trying to add them back into allproc > >>> > >>> I have pasted the code below. > >>> > >>> ----------------------------------------------------------------------- > >>> struct proc *p = a process from my own list; > >>> if( p != NULL && (p->p_state == PRS_NEW || p->p_state == PRS_NORMAL) ){ > >>> LIST_INSERT_HEAD(&allproc, p, p_list); > >>> } > >>> ----------------------------------------------------------------------- > > >> > >>> _______________________________________________ > >>> freebsd-hackers@freebsd.org mailing list > >>> http://lists.freebsd.org/mailman/listinfo/freebsd-hackers > >>> To unsubscribe, send any mail to "freebsd-hackers-unsubscribe@freebsd.org" >