Index: openacs-4/packages/xotcl-core/tcl/cr-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xotcl-core/tcl/cr-procs.tcl,v diff -u -r1.54.2.6 -r1.54.2.7 --- openacs-4/packages/xotcl-core/tcl/cr-procs.tcl 27 Nov 2015 13:10:09 -0000 1.54.2.6 +++ openacs-4/packages/xotcl-core/tcl/cr-procs.tcl 1 Dec 2015 09:29:32 -0000 1.54.2.7 @@ -55,17 +55,25 @@ @return object_type typically an XOTcl class } { - set object_type [ns_cache eval xotcl_object_type_cache \ - [expr {$item_id ? $item_id : $revision_id}] { - if {$item_id} { - ::xo::dc 1row get_class_from_item_id \ - "select content_type as object_type from cr_items where item_id=:item_id" - } else { - ::xo::dc 1row get_class_from_revision_id \ - "select object_type from acs_objects where object_id=:revision_id" - } - return $object_type - }] + # + # Use a request-spanning cache. When the type whould changes, we + # would require xo::broadcast or server restart. + # + set key ::xo::object_type($item_id,$revision_id) + if {[info exists $key]} { + return [set $key] + } + set $key [ns_cache eval xotcl_object_type_cache \ + [expr {$item_id ? $item_id : $revision_id}] { + if {$item_id} { + ::xo::dc 1row get_class_from_item_id \ + "select content_type as object_type from cr_items where item_id=:item_id" + } else { + ::xo::dc 1row get_class_from_revision_id \ + "select object_type from acs_objects where object_id=:revision_id" + } + return $object_type + }] } CrClass ad_proc get_instance_from_db {