Home | History | Annotate | Download | only in system_properties

Lines Matching refs:pi

143 int SystemProperties::Read(const prop_info* pi, char* name, char* value) {
145 uint32_t serial = Serial(pi); // acquire semantics
147 memcpy(value, pi->value, len + 1);
151 // updates to pi, and the data being accessed is not atomic.
157 if (serial == load_const_atomic(&(pi->serial), memory_order_relaxed)) {
159 size_t namelen = strlcpy(name, pi->name, PROP_NAME_MAX);
165 pi->name, PROP_NAME_MAX - 1, name);
168 if (is_read_only(pi->name) && pi->is_long()) {
174 pi->name, strlen(pi->long_value()));
181 void SystemProperties::ReadCallback(const prop_info* pi,
187 if (is_read_only(pi->name)) {
188 uint32_t serial = Serial(pi);
189 if (pi->is_long()) {
190 callback(cookie, pi->name, pi->long_value(), serial);
192 callback(cookie, pi->name, pi->value, serial);
198 uint32_t serial = Serial(pi); // acquire semantics
202 memcpy(value_buf, pi->value, len);
207 if (serial == load_const_atomic(&(pi->serial), memory_order_relaxed)) {
208 callback(cookie, pi->name, value_buf, serial);
215 const prop_info* pi = Find(name);
217 if (pi != 0) {
218 return Read(pi, nullptr, value);
225 int SystemProperties::Update(prop_info* pi, const char* value, unsigned int len) {
239 uint32_t serial = atomic_load_explicit(&pi->serial, memory_order_relaxed);
241 atomic_store_explicit(&pi->serial, serial, memory_order_relaxed);
246 strlcpy(pi->value, value, len + 1);
248 atomic_store_explicit(&pi->serial, (len << 24) | ((serial + 1) & 0xffffff), memory_order_release);
249 __futex_wake(&pi->serial, INT32_MAX);
298 uint32_t SystemProperties::Serial(const prop_info* pi) {
299 uint32_t serial = load_const_atomic(&pi->serial, memory_order_acquire);
301 __futex_wait(const_cast<_Atomic(uint_least32_t)*>(&pi->serial), serial, nullptr);
302 serial = load_const_atomic(&pi->serial, memory_order_acquire);
313 bool SystemProperties::Wait(const prop_info* pi, uint32_t old_serial, uint32_t* new_serial_ptr,
317 if (pi == nullptr) {
329 serial_ptr = const_cast<atomic_uint_least32_t*>(&pi->serial);
353 static void fn(const prop_info* pi, void* ptr) {
355 if (self->current++ == self->sought) self->result = pi;
362 int SystemProperties::Foreach(void (*propfn)(const prop_info* pi, void* cookie), void* cookie) {