|  |  | @ -341,9 +341,9 @@ struct stratifier_data { | 
			
		
	
		
		
			
				
					
					|  |  |  | 	/* Protects sequence numbers */ |  |  |  | 	/* Protects sequence numbers */ | 
			
		
	
		
		
			
				
					
					|  |  |  | 	mutex_t ckdb_msg_lock; |  |  |  | 	mutex_t ckdb_msg_lock; | 
			
		
	
		
		
			
				
					
					|  |  |  | 	/* Incrementing global sequence number */ |  |  |  | 	/* Incrementing global sequence number */ | 
			
		
	
		
		
			
				
					
					|  |  |  | 	int ckdb_seq; |  |  |  | 	uint64_t ckdb_seq; | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 	/* Incrementing ckdb_ids[] sequence numbers */ |  |  |  | 	/* Incrementing ckdb_ids[] sequence numbers */ | 
			
		
	
		
		
			
				
					
					|  |  |  | 	int ckdb_seq_ids[ID_COUNT]; |  |  |  | 	uint64_t ckdb_seq_ids[ID_COUNT]; | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 	bool ckdb_offline; |  |  |  | 	bool ckdb_offline; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  |  | @ -637,19 +637,21 @@ static char *ckdb_msg(ckpool_t *ckp, sdata_t *sdata, json_t *val, const int idty | 
			
		
	
		
		
			
				
					
					|  |  |  | 	char *json_msg; |  |  |  | 	char *json_msg; | 
			
		
	
		
		
			
				
					
					|  |  |  | 	char logname[512]; |  |  |  | 	char logname[512]; | 
			
		
	
		
		
			
				
					
					|  |  |  | 	char *ret = NULL; |  |  |  | 	char *ret = NULL; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 	uint64_t seqall; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 	/* Set the atomically incrementing sequence number */ |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 	mutex_lock(&sdata->ckdb_msg_lock); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 	json_set_int(val, "seqstart", ckp->starttime); |  |  |  | 	json_set_int(val, "seqstart", ckp->starttime); | 
			
		
	
		
		
			
				
					
					|  |  |  | 	json_set_int(val, "seqpid", ckp->startpid); |  |  |  | 	json_set_int(val, "seqpid", ckp->startpid); | 
			
		
	
		
		
			
				
					
					|  |  |  | 	json_set_int(val, "seqall", sdata->ckdb_seq++); |  |  |  | 	/* Set the atomically incrementing sequence numbers */ | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 	mutex_lock(&sdata->ckdb_msg_lock); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 	seqall = sdata->ckdb_seq++; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 	json_set_int(val, "seqall", seqall); | 
			
		
	
		
		
			
				
					
					|  |  |  | 	json_set_int(val, ckdb_seq_names[idtype], sdata->ckdb_seq_ids[idtype]++); |  |  |  | 	json_set_int(val, ckdb_seq_names[idtype], sdata->ckdb_seq_ids[idtype]++); | 
			
		
	
		
		
			
				
					
					|  |  |  | 	mutex_unlock(&sdata->ckdb_msg_lock); |  |  |  | 	mutex_unlock(&sdata->ckdb_msg_lock); | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 	json_msg = json_dumps(val, JSON_COMPACT); |  |  |  | 	json_msg = json_dumps(val, JSON_COMPACT); | 
			
		
	
		
		
			
				
					
					|  |  |  | 	if (unlikely(!json_msg)) |  |  |  | 	if (unlikely(!json_msg)) | 
			
		
	
		
		
			
				
					
					|  |  |  | 		goto out; |  |  |  | 		goto out; | 
			
		
	
		
		
			
				
					
					|  |  |  | 	ASPRINTF(&ret, "%s.id.json=%s", ckdb_ids[idtype], json_msg); |  |  |  | 	ASPRINTF(&ret, "%s.%"PRIu64".json=%s", ckdb_ids[idtype], seqall, json_msg); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 	free(json_msg); |  |  |  | 	free(json_msg); | 
			
		
	
		
		
			
				
					
					|  |  |  | out: |  |  |  | out: | 
			
		
	
		
		
			
				
					
					|  |  |  | 	json_decref(val); |  |  |  | 	json_decref(val); | 
			
		
	
	
		
		
			
				
					|  |  | @ -2410,7 +2412,7 @@ static int send_recv_auth(stratum_instance_t *client) | 
			
		
	
		
		
			
				
					
					|  |  |  | 		LOGINFO("Got ckdb response: %s", buf); |  |  |  | 		LOGINFO("Got ckdb response: %s", buf); | 
			
		
	
		
		
			
				
					
					|  |  |  | 		response = alloca(responselen); |  |  |  | 		response = alloca(responselen); | 
			
		
	
		
		
			
				
					
					|  |  |  | 		memset(response, 0, responselen); |  |  |  | 		memset(response, 0, responselen); | 
			
		
	
		
		
			
				
					
					|  |  |  | 		if (unlikely(sscanf(buf, "id.%*d.%c%n", response, &offset) < 1)) { |  |  |  | 		if (unlikely(sscanf(buf, "%*d.%*d.%c%n", response, &offset) < 1)) { | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 			LOGWARNING("Got1 unparseable ckdb auth response: %s", buf); |  |  |  | 			LOGWARNING("Got1 unparseable ckdb auth response: %s", buf); | 
			
		
	
		
		
			
				
					
					|  |  |  | 			goto out_fail; |  |  |  | 			goto out_fail; | 
			
		
	
		
		
			
				
					
					|  |  |  | 		} |  |  |  | 		} | 
			
		
	
	
		
		
			
				
					|  |  | @ -3821,7 +3823,7 @@ static void ckdbq_process(ckpool_t *ckp, char *msg) | 
			
		
	
		
		
			
				
					
					|  |  |  | 		int offset = 0; |  |  |  | 		int offset = 0; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 		memset(response, 0, responselen); |  |  |  | 		memset(response, 0, responselen); | 
			
		
	
		
		
			
				
					
					|  |  |  | 		if (sscanf(buf, "id.%*d.%c%n", response, &offset) > 0) { |  |  |  | 		if (sscanf(buf, "%*d.%*d.%c%n", response, &offset) > 0) { | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 			strcpy(response+1, buf+offset); |  |  |  | 			strcpy(response+1, buf+offset); | 
			
		
	
		
		
			
				
					
					|  |  |  | 			if (safecmp(response, "ok")) { |  |  |  | 			if (safecmp(response, "ok")) { | 
			
		
	
		
		
			
				
					
					|  |  |  | 				char *cmd; |  |  |  | 				char *cmd; | 
			
		
	
	
		
		
			
				
					|  |  | 
 |