+
+ zebra_mutex_cond_lock (&zh->service->session_lock);
+
+ state = zebra_server_lock_get_state(zh->service, &lastChange);
+
+ zebra_server_lock (zh->service, state);
+
+ switch (state)
+ {
+ case 'c':
+ state = 1;
+ break;
+ default:
+ state = 0;
+ }
+ if (rw)
+ logf (LOG_LOG, "Register in read/write mode");
+ else if (zh->service->registerState == state)
+ {
+ logf (LOG_DEBUG, "registerChange = %ld lastChange = %ld",
+ (long) zh->service->registerChange, (long)lastChange);
+ if (zh->service->registerChange >= lastChange)
+ {
+ return 0;
+ }
+ logf (LOG_LOG, "Register completely updated since last access");
+ }
+ else if (zh->service->registerState == -1)
+ logf (LOG_LOG, "Reading register using state %d pid=%ld", state,
+ (long) getpid());
+ else
+ logf (LOG_LOG, "Register has changed state from %d to %d",
+ zh->service->registerState, state);
+ zh->service->registerChange = lastChange;
+
+ zebra_register_deactivate (zh->service);
+
+ zh->service->registerState = state;
+
+ zebra_register_activate (zh->service, rw);