Hi all,
        I've written a Python<->C bridge for libaiscf. It provides a few 
ways to interact with SMF. I'm looking for some folks to look the code 
over for memory management issues, for any potential SMF issues or any 
other issues others might see. This code has not be whacked to be c-style 
happy, so don't worry about that unless you really want.
        I am having issues with the delete section of 
AIservice_set_subscript(), if anyone has any suggestions what might be 
happening (dbx stack trace included). This is triggered when one tries to 
delete a property via:
del(libaiscf.AIservice(libaiscf.AISCF(),"test")['status'])

                                                        Thank you,
                                                        Clay

Webrev is at:
http://cr.opensolaris.org/~clayb/10740/webrev_prelim1/

How the module works:
---------------------
To load the module, one runs
import libaiscf

Then to create an SMF instance object, one can run
(for svc:/system/install/server:default)
instance=libaiscf.AISCF()
(for svc:/system/install/server:someThingElse)
instance=libaiscf.AISCF("someThingElse")

Further, to create an AI service object, one runs:
service=libaiscf.AIservice(instance,"serviceName")

To see a property key under the service, one can do:
service['status'] (which returns the string value or a KeyError as a
                   dictionary would if the key doesn't exist)
To set or change a property under the service, one can do:
serivce['status']="off"

All actions query SMF and no data is cached in case something changes 
under the consumer. All actions are handed to SMF when executed. Other 
functions implemented can be read in the PyDoc output for the module, here 
attached.
-------------- next part --------------
Help on module libaiscf:

NAME
    libaiscf

FILE
    
/export/backup/hg_workspaces/slim_source_libpyscf/usr/src/lib/libaiscf_pymod/pics/i386/libaiscf.py

CLASSES
    _libaiscf._AISCF(__builtin__.object)
        AISCF
    _libaiscf._AIservice(__builtin__.object)
        AIservice
    
    class AISCF(_libaiscf._AISCF)
     |  Class representing an AI SMF instance
     |  
     |  Method resolution order:
     |      AISCF
     |      _libaiscf._AISCF
     |      __builtin__.object
     |  
     |  Methods defined here:
     |  
     |  get_services(self)
     |      Return a dictionary associating service names and AIservice objects
     |      associated with an SMF instance
     |  
     |  ----------------------------------------------------------------------
     |  Properties defined here:
     |  
     |  services
     |      The services associated with an SMF instance
     |  
     |      <get> = get_services(self)
     |          Return a dictionary associating service names and AIservice 
objects
     |          associated with an SMF instance
     |  
     |  ----------------------------------------------------------------------
     |  Data and other attributes defined here:
     |  
     |  __dict__ = <dictproxy object>
     |      dictionary for instance variables (if defined)
     |  
     |  __weakref__ = <attribute '__weakref__' of 'AISCF' objects>
     |      list of weak references to the object (if defined)
     |  
     |  ----------------------------------------------------------------------
     |  Methods inherited from _libaiscf._AISCF:
     |  
     |  __init__(...)
     |      x.__init__(...) initializes x; see x.__class__.__doc__ for signature
     |  
     |  del_service(...)
     |      Delete a service
     |  
     |  ----------------------------------------------------------------------
     |  Data and other attributes inherited from _libaiscf._AISCF:
     |  
     |  __new__ = <built-in method __new__ of type object>
     |      T.__new__(S, ...) -> a new object with type S, a subtype of T
     |  
     |  instanceName = <member 'instanceName' of '_libaiscf._AISCF' objects>
     |      AISCF Instance Name
    
    class AIservice(_libaiscf._AIservice)
     |  Class representing an AI SMF service
     |  
     |  Method resolution order:
     |      AIservice
     |      _libaiscf._AIservice
     |      __builtin__.object
     |  
     |  Methods defined here:
     |  
     |  keys(self)
     |      Return the properties of an AI service
     |  
     |  values(self)
     |      Return the property values of an AI service
     |  
     |  ----------------------------------------------------------------------
     |  Data and other attributes defined here:
     |  
     |  __dict__ = <dictproxy object>
     |      dictionary for instance variables (if defined)
     |  
     |  __weakref__ = <attribute '__weakref__' of 'AIservice' objects>
     |      list of weak references to the object (if defined)
     |  
     |  ----------------------------------------------------------------------
     |  Methods inherited from _libaiscf._AIservice:
     |  
     |  __delitem__(...)
     |      x.__delitem__(y) <==> del x[y]
     |  
     |  __getitem__(...)
     |      x.__getitem__(y) <==> x[y]
     |  
     |  __init__(...)
     |      x.__init__(...) initializes x; see x.__class__.__doc__ for signature
     |  
     |  __setitem__(...)
     |      x.__setitem__(i, y) <==> x[i]=y
     |  
     |  __str__(...)
     |      x.__str__() <==> str(x)
     |  
     |  as_dict(...)
     |      Get a dict of service properties and values
     |  
     |  ----------------------------------------------------------------------
     |  Data and other attributes inherited from _libaiscf._AIservice:
     |  
     |  __new__ = <built-in method __new__ of type object>
     |      T.__new__(S, ...) -> a new object with type S, a subtype of T
     |  
     |  serviceName = <member 'serviceName' of '_libaiscf._AIservice' objects>
     |      AI Service Name


-------------- next part --------------
program terminated by signal SEGV (no mapping at the fault address)
0xfed550fb: mutex_lock_impl+0x0023:     movzbl   0x00000004(%eax),%edi
Current function is AIservice_set_subscript
dbx: warning: File `libaiscf_service.c' has been modified more recently than 
`_li
baiscf.so'
  262                       PyString_AsString(subscript));
(dbx) where
  [1] mutex_lock_impl(0x0, 0x0, 0xfea3c000, 0x8046df8, 0xfea0f3cf, 0x80d3380), 
at
 0xfed550fb
  [2] mutex_lock(0x0), at 0xfed5530d
  [3] scf_entry_destroy(0x81154f8, 0x0), at 0xfea0f5bc
  [4] ai_delete_property(0x80a5918, 0x8046e50, 0x80dfa94), at 0xfec11f01
=>[5] AIservice_set_subscript(self = 0x80e666c, subscript = 0x80dfa80, value = 
(n
il)), line 262 in "libaiscf_service.c"
  [6] PyObject_DelItem(0x80e666c, 0x80dfa80, 0x80e661c, 0x7), at 0xfeea5fdd

Reply via email to