reg: adding proc to allproc (Ferner Cilloniz) new_entry->p ..... is accessing the "read/write" pointer declared in the proc_ll struct
new_entry->p = p; is attempting an assignment of a "read ONLY" const pointer that has been passed into add_proc_entry() to a "read/write" pointer new_entry->"read/write pointer" = "read ONLY pointer"; is invalid "new_entry->p = p; // maybe doing this assignment isnt correct?" with this assertion I agree [email protected] wrote: Send freebsd-hackers mailing list submissions to [email protected] To subscribe or unsubscribe via the World Wide Web, visit http://lists.freebsd.org/mailman/listinfo/freebsd-hackers or, via email, send a message with subject or body 'help' to [email protected] You can reach the person managing the list at [email protected] When replying, please edit your Subject line so it is more specific than "Re: Contents of freebsd-hackers digest..." Today's Topics: 1. adding proc to allproc (Ferner Cilloniz) 2. Re: adding proc to allproc (Julian Elischer) 3. Re: adding proc to allproc (Ferner Cilloniz) 4. Re: adding proc to allproc (Julian Elischer) 5. Re: adding proc to allproc (Ferner Cilloniz) ---------------------------------------------------------------------- Message: 1 Date: Fri, 19 Dec 2008 22:39:20 +0000 From: Ferner Cilloniz Subject: adding proc to allproc To: [email protected] Message-ID: <[email protected]> Content-Type: text/plain 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); } ----------------------------------------------------------------------- Thanks. ------------------------------ Message: 2 Date: Fri, 19 Dec 2008 21:27:34 -0800 From: Julian Elischer Subject: Re: adding proc to allproc To: Ferner Cilloniz Cc: [email protected] Message-ID: <[email protected]> Content-Type: text/plain; charset=ISO-8859-1; format=flowed 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); > } > ----------------------------------------------------------------------- > > Thanks. and your question is? > > _______________________________________________ > [email protected] mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-hackers > To unsubscribe, send any mail to "[email protected]" ------------------------------ Message: 3 Date: Fri, 19 Dec 2008 23:28:46 +0000 From: Ferner Cilloniz Subject: Re: adding proc to allproc To: Julian Elischer Cc: [email protected] Message-ID: <[email protected]> Content-Type: text/plain When i run the code from a KLD it hangs the system. No reboot occurs however, it just hangs there. 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); > > } > > ----------------------------------------------------------------------- > > > > Thanks. > > and your question is? > > > > > > _______________________________________________ > > [email protected] mailing list > > http://lists.freebsd.org/mailman/listinfo/freebsd-hackers > > To unsubscribe, send any mail to "[email protected]" > -- Cilloniz Bicchi, Ferner Research Assistant Dept. of Computer Sciences The University of Texas at Austin http://www.cs.utexas.edu/~fernercc [email protected] ------------------------------ Message: 4 Date: Fri, 19 Dec 2008 21:39:20 -0800 From: Julian Elischer Subject: Re: adding proc to allproc To: Ferner Cilloniz Cc: [email protected] Message-ID: <[email protected]> Content-Type: text/plain; charset=ISO-8859-1; format=flowed 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); >>> } >>> ----------------------------------------------------------------------- >> >>> _______________________________________________ >>> [email protected] mailing list >>> http://lists.freebsd.org/mailman/listinfo/freebsd-hackers >>> To unsubscribe, send any mail to "[email protected]" ------------------------------ Message: 5 Date: Sat, 20 Dec 2008 02:23:20 +0000 From: Ferner Cilloniz Subject: Re: adding proc to allproc To: Julian Elischer Cc: [email protected] Message-ID: <[email protected]> Content-Type: text/plain 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); > >>> } > >>> ----------------------------------------------------------------------- > > >> > >>> _______________________________________________ > >>> [email protected] mailing list > >>> http://lists.freebsd.org/mailman/listinfo/freebsd-hackers > >>> To unsubscribe, send any mail to "[email protected]" > ------------------------------ _______________________________________________ [email protected] mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-hackers To unsubscribe, send any mail to "[email protected]" End of freebsd-hackers Digest, Vol 299, Issue 5 *********************************************** _______________________________________________ [email protected] mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-hackers To unsubscribe, send any mail to "[email protected]"

