/** * contributed by Gavin Sherry [email protected] * Fri Mar 16 00:50:13 EST 2001 */ bool f_sem_remove(CObjRef sem_identifier) { Semaphore *sem_ptr = sem_identifier.getTyped<Semaphore>(); union semun un; struct semid_ds buf; un.buf = &buf; if (semctl(sem_ptr->semid, 0, IPC_STAT, un) < 0) { raise_warning("SysV semaphore %d does not (any longer) exist", sem_identifier->o_getId()); return false; } if (semctl(sem_ptr->semid, 0, IPC_RMID, un) < 0) { raise_warning("failed for SysV sempphore %d: %s", sem_identifier->o_getId(), Util::safe_strerror(errno).c_str()); return false; } /* let release_sysvsem_sem know we have removed * the semaphore to avoid issues with releasing. */ sem_ptr->count = -1; return true; }
void VariableSerializer::write(CObjRef v) { if (!v.isNull() && m_type == JSON) { if (incNestedLevel(v.get(), true)) { writeOverflow(v.get(), true); } else { Array props(ArrayData::Create()); ClassInfo::GetArray(v.get(), v->o_getClassPropTable(), props, true); setObjectInfo(v->o_getClassName(), v->o_getId()); props.serialize(this); } decNestedLevel(v.get()); } else { v.serialize(this); } }
void VariableSerializer::write(CObjRef v) { if (!v.isNull() && m_type == JSON) { Array props = v->o_toArray(); ClassInfo::PropertyVec properties; ClassInfo::GetClassProperties(properties, v->o_getClassName()); for (ClassInfo::PropertyVec::const_iterator iter = properties.begin(); iter != properties.end(); ++iter) { if ((*iter)->attribute & ClassInfo::IsProtected) { props.remove((*iter)->name); } } // Remove private props for (ArrayIter it(props); !it.end(); it.next()) { if (it.first().toString().charAt(0) == '\0') { props.remove(it.first()); } } setObjectInfo(v->o_getClassName(), v->o_getId()); props.serialize(this); } else { v.serialize(this); } }