static int updateProperties( gpointer data) { OBD2Source* src = (OBD2Source*)data; while (gpointer retval = g_async_queue_try_pop(src->statusQueue)) { StatusMessage *reply = (StatusMessage*)retval; if (reply->statusStr == "disconnected") { OBD2Source::Obd2ConnectType val(Obd2Connected,false); src->updateProperty(Obd2Connected,&val); } else if (reply->statusStr == "connected") { OBD2Source::Obd2ConnectType val(Obd2Connected, true); src->updateProperty(Obd2Connected,&val); } else if (reply->statusStr == "error:nodata" || reply->statusStr == "error:timeout") { if (src->propertyReplyMap.find(reply->property) != src->propertyReplyMap.end()) { DebugOut(5) << __SMALLFILE__ <<":"<< __LINE__ << reply->statusStr << " on property:" << reply->property << endl; src->propertyReplyMap[reply->property]->success = false; src->propertyReplyMap[reply->property]->error = AsyncPropertyReply::InvalidOperation; src->propertyReplyMap[reply->property]->completed(src->propertyReplyMap[reply->property]); src->propertyReplyMap.erase(reply->property); /// Remove support for this pid: PropertyList list = src->supported(); list.remove(reply->property); src->setSupported(list); } else { DebugOut(5) << __SMALLFILE__ <<":"<< __LINE__ << reply->statusStr << " on unrequested property:" << reply->property << endl; } } delete reply; } while(gpointer retval = g_async_queue_try_pop(src->responseQueue)) { ObdPid *reply = (ObdPid*)retval; AbstractPropertyType* value = VehicleProperty::getPropertyTypeForPropertyNameValue(reply->property, reply->value); src->updateProperty(reply->property, value); delete value; } return true; }