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]"

Reply via email to